feat: update vc-slider to 8.6.3
							parent
							
								
									6e5e8a972e
								
							
						
					
					
						commit
						e825830079
					
				|  | @ -1,3 +1,3 @@ | |||
| // base rc-slider 8.6.1
 | ||||
| // base rc-slider 8.6.3
 | ||||
| import Slider from './src/' | ||||
| export default Slider | ||||
|  |  | |||
|  | @ -1,6 +1,8 @@ | |||
| import classNames from 'classnames' | ||||
| import PropTypes from '../../_util/vue-types' | ||||
| import BaseMixin from '../../_util/BaseMixin' | ||||
| import { getOptionProps } from '../../_util/props-util' | ||||
| import addEventListener from '../../_util/Dom/addEventListener' | ||||
| 
 | ||||
| export default { | ||||
|   name: 'Handle', | ||||
|  | @ -18,7 +20,42 @@ export default { | |||
|     // handleFocus: PropTypes.func.def(noop), | ||||
|     // handleBlur: PropTypes.func.def(noop), | ||||
|   }, | ||||
|   data () { | ||||
|     return { | ||||
|       clickFocused: false, | ||||
|     } | ||||
|   }, | ||||
|   mounted () { | ||||
|     this.$nextTick(() => { | ||||
|       // mouseup won't trigger if mouse moved out of handle | ||||
|       // so we listen on document here. | ||||
|       this.onMouseUpListener = addEventListener(document, 'mouseup', this.handleMouseUp) | ||||
|     }) | ||||
|   }, | ||||
|   beforeDestroy () { | ||||
|     if (this.onMouseUpListener) { | ||||
|       this.onMouseUpListener.remove() | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|     setClickFocus (focused) { | ||||
|       this.setState({ clickFocused: focused }) | ||||
|     }, | ||||
|     handleMouseUp () { | ||||
|       if (document.activeElement === this.$refs.handle) { | ||||
|         this.setClickFocus(true) | ||||
|       } | ||||
|     }, | ||||
|     handleBlur () { | ||||
|       this.setClickFocus(false) | ||||
|     }, | ||||
|     handleKeyDown () { | ||||
|       this.setClickFocus(false) | ||||
|     }, | ||||
|     clickFocus () { | ||||
|       this.setClickFocus(true) | ||||
|       this.focus() | ||||
|     }, | ||||
|     focus () { | ||||
|       this.$refs.handle.focus() | ||||
|     }, | ||||
|  | @ -28,23 +65,27 @@ export default { | |||
|   }, | ||||
|   render () { | ||||
|     const { | ||||
|       className, vertical, offset, disabled, min, max, value, tabIndex, | ||||
|       prefixCls, vertical, offset, disabled, min, max, value, tabIndex, | ||||
|     } = getOptionProps(this) | ||||
| 
 | ||||
|     const className = classNames( | ||||
|       this.$props.className, | ||||
|       { | ||||
|         [`${prefixCls}-handle-click-focused`]: this.clickFocused, | ||||
|       } | ||||
|     ) | ||||
| 
 | ||||
|     const postionStyle = vertical ? { bottom: `${offset}%` } : { left: `${offset}%` } | ||||
|     const elStyle = { | ||||
|       ...postionStyle, | ||||
|     } | ||||
|     let ariaProps = {} | ||||
|     if (value !== undefined) { | ||||
|       ariaProps = { | ||||
|         ...ariaProps, | ||||
|         'aria-valuemin': min, | ||||
|         'aria-valuemax': max, | ||||
|         'aria-valuenow': value, | ||||
|         'aria-disabled': !!disabled, | ||||
|       } | ||||
|     const ariaProps = { | ||||
|       'aria-valuemin': min, | ||||
|       'aria-valuemax': max, | ||||
|       'aria-valuenow': value, | ||||
|       'aria-disabled': !!disabled, | ||||
|     } | ||||
| 
 | ||||
|     const handleProps = { | ||||
|       attrs: { | ||||
|         role: 'slider', | ||||
|  |  | |||
|  | @ -1,5 +1,4 @@ | |||
| import classNames from 'classnames' | ||||
| import warning from 'warning' | ||||
| import PropTypes from '../../_util/vue-types' | ||||
| import BaseMixin from '../../_util/BaseMixin' | ||||
| import { initDefaultProps, hasProp } from '../../_util/props-util' | ||||
|  | @ -32,7 +31,7 @@ const Range = { | |||
|   }), | ||||
|   data () { | ||||
|     const { count, min, max } = this | ||||
|     const initialValue = Array.apply(null, Array(count + 1)) | ||||
|     const initialValue = Array(...Array(count + 1)) | ||||
|       .map(() => min) | ||||
|     const defaultValue = hasProp(this, 'defaultValue') ? this.defaultValue : initialValue | ||||
|     let { value } = this | ||||
|  | @ -78,7 +77,10 @@ const Range = { | |||
|       this.setState({ bounds: nextBounds }) | ||||
| 
 | ||||
|       if (bounds.some(v => utils.isValueOutOfRange(v, minAmaxProps))) { | ||||
|         this.$emit('change', nextBounds) | ||||
|         const newValues = value.map((v) => { | ||||
|           return utils.ensureValueInRange(v, minAmaxProps) | ||||
|         }) | ||||
|         this.$emit('change', newValues) | ||||
|       } | ||||
|     }, | ||||
|     onChange (state) { | ||||
|  | @ -102,48 +104,46 @@ const Range = { | |||
|       this.startPosition = position | ||||
| 
 | ||||
|       const closestBound = this.getClosestBound(value) | ||||
|       const boundNeedMoving = this.getBoundNeedMoving(value, closestBound) | ||||
|       this.prevMovedHandleIndex = this.getBoundNeedMoving(value, closestBound) | ||||
| 
 | ||||
|       this.setState({ | ||||
|         sHandle: boundNeedMoving, | ||||
|         recent: boundNeedMoving, | ||||
|         sHandle: this.prevMovedHandleIndex, | ||||
|         recent: this.prevMovedHandleIndex, | ||||
|       }) | ||||
| 
 | ||||
|       const prevValue = bounds[boundNeedMoving] | ||||
|       const prevValue = bounds[this.prevMovedHandleIndex] | ||||
|       if (value === prevValue) return | ||||
|       const nextBounds = [...bounds] | ||||
|       nextBounds[boundNeedMoving] = value | ||||
|       nextBounds[this.prevMovedHandleIndex] = value | ||||
|       this.onChange({ bounds: nextBounds }) | ||||
|     }, | ||||
|     onEnd () { | ||||
|       this.setState({ sHandle: null }) | ||||
|       this.setState({ sHandle: null }, this.onBlur) | ||||
|       this.removeDocumentEvents() | ||||
|       this.$emit('afterChange', this.bounds) | ||||
|     }, | ||||
|     onMove (e, position) { | ||||
|       utils.pauseEvent(e) | ||||
|       const props = this.$props | ||||
|       const { bounds, sHandle } = this | ||||
|       const value = this.calcValueByPos(position) | ||||
|       const oldValue = bounds[sHandle] | ||||
|       if (value === oldValue) return | ||||
| 
 | ||||
|       const nextBounds = [...bounds] | ||||
|       nextBounds[sHandle] = value | ||||
|       let nextHandle = sHandle | ||||
|       if (props.pushable !== false) { | ||||
|         this.pushSurroundingHandles(nextBounds, nextHandle) | ||||
|       } else if (props.allowCross) { | ||||
|         nextBounds.sort((a, b) => a - b) | ||||
|         nextHandle = nextBounds.indexOf(value) | ||||
|       } | ||||
|       this.onChange({ | ||||
|         sHandle: nextHandle, | ||||
|         bounds: nextBounds, | ||||
|       }) | ||||
|       this.moveTo(value) | ||||
|     }, | ||||
|     onKeyboard () { | ||||
|       warning(true, 'Keyboard support is not yet supported for ranges.') | ||||
|     onKeyboard (e) { | ||||
|       const valueMutator = utils.getKeyboardValueMutator(e) | ||||
| 
 | ||||
|       if (valueMutator) { | ||||
|         utils.pauseEvent(e) | ||||
|         const { bounds, sHandle } = this | ||||
|         const oldValue = bounds[sHandle] | ||||
|         const mutatedValue = valueMutator(oldValue, this.$props) | ||||
|         const value = this.trimAlignValue(mutatedValue) | ||||
|         if (value === oldValue) return | ||||
|         const isFromKeyboardEvent = true | ||||
|         this.moveTo(value, isFromKeyboardEvent) | ||||
|       } | ||||
|     }, | ||||
|     getClosestBound (value) { | ||||
|       const { bounds } = this | ||||
|  | @ -152,7 +152,7 @@ const Range = { | |||
|         if (value > bounds[i]) { closestBound = i } | ||||
|       } | ||||
|       if (Math.abs(bounds[closestBound + 1] - value) < Math.abs(bounds[closestBound] - value)) { | ||||
|         closestBound = closestBound + 1 | ||||
|         closestBound += 1 | ||||
|       } | ||||
|       return closestBound | ||||
|     }, | ||||
|  | @ -197,6 +197,33 @@ const Range = { | |||
|       } | ||||
|       return this._getPointsCache.points | ||||
|     }, | ||||
| 
 | ||||
|     moveTo (value, isFromKeyboardEvent) { | ||||
|       const nextBounds = [...this.bounds] | ||||
|       const { sHandle } = this | ||||
|       nextBounds[sHandle] = value | ||||
|       let nextHandle = sHandle | ||||
|       if (this.$props.pushable !== false) { | ||||
|         this.pushSurroundingHandles(nextBounds, nextHandle) | ||||
|       } else if (this.$props.allowCross) { | ||||
|         nextBounds.sort((a, b) => a - b) | ||||
|         nextHandle = nextBounds.indexOf(value) | ||||
|       } | ||||
|       this.onChange({ | ||||
|         handle: nextHandle, | ||||
|         bounds: nextBounds, | ||||
|       }) | ||||
|       if (isFromKeyboardEvent) { | ||||
|         // known problem: because setState is async, | ||||
|         // so trigger focus will invoke handler's onEnd and another handler's onStart too early, | ||||
|         // cause onBeforeChange and onAfterChange receive wrong value. | ||||
|         // here use setState callback to hack,but not elegant | ||||
|         this.setState({}, () => { | ||||
|           this.handlesRefs[nextHandle].focus() | ||||
|         }) | ||||
|       } | ||||
|     }, | ||||
| 
 | ||||
|     pushSurroundingHandles (bounds, handle) { | ||||
|       const value = bounds[handle] | ||||
|       let { pushable: threshold } = this | ||||
|  | @ -322,6 +349,7 @@ const Range = { | |||
|           [handleClassName]: true, | ||||
|           [`${handleClassName}-${i + 1}`]: true, | ||||
|         }), | ||||
|         prefixCls, | ||||
|         vertical, | ||||
|         offset: offsets[i], | ||||
|         value: v, | ||||
|  |  | |||
|  | @ -98,6 +98,7 @@ const Slider = { | |||
|       this.startPosition = position | ||||
|       if (value === sValue) return | ||||
| 
 | ||||
|       this.prevMovedHandleIndex = 0 | ||||
|       this.onChange({ sValue: value }) | ||||
|     }, | ||||
|     onEnd () { | ||||
|  | @ -170,6 +171,7 @@ const Slider = { | |||
|       const offset = this.calcOffset(sValue) | ||||
|       const handle = handleGenerator(this.$createElement, { | ||||
|         className: `${prefixCls}-handle`, | ||||
|         prefixCls, | ||||
|         vertical, | ||||
|         offset, | ||||
|         value: sValue, | ||||
|  |  | |||
|  | @ -11,10 +11,10 @@ const Marks = { | |||
|       included, | ||||
|       upperBound, | ||||
|       lowerBound, | ||||
|       max, min, | ||||
|       max, | ||||
|       min, | ||||
|     } = context.props | ||||
|     // antd未开发完成 | ||||
|     // const { clickLabel } = context.listeners | ||||
|     const { clickLabel } = context.listeners | ||||
|     const marksKeys = Object.keys(marks) | ||||
|     const marksCount = marksKeys.length | ||||
|     const unit = marksCount > 1 ? 100 / (marksCount - 1) : 100 | ||||
|  | @ -56,6 +56,8 @@ const Marks = { | |||
|           class={markClassName} | ||||
|           style={markStyle} | ||||
|           key={point} | ||||
|           onMousedown={(e) => clickLabel(e, point)} | ||||
|           onTouchstart={(e) => clickLabel(e, point)} | ||||
|         > | ||||
|           {markLabel} | ||||
|         </span> | ||||
|  |  | |||
|  | @ -8,9 +8,10 @@ const calcPoints = (vertical, marks, dots, step, min, max) => { | |||
|   ) | ||||
|   const points = Object.keys(marks).map(parseFloat) | ||||
|   if (dots) { | ||||
|     for (let i = min; i <= max; i = i + step) { | ||||
|       if (points.indexOf(i) >= 0) continue | ||||
|       points.push(i) | ||||
|     for (let i = min; i <= max; i += step) { | ||||
|       if (points.indexOf(i) === -1) { | ||||
|         points.push(i) | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   return points | ||||
|  |  | |||
|  | @ -80,12 +80,6 @@ export default function createSlider (Component) { | |||
|       } | ||||
|       return {} | ||||
|     }, | ||||
|     beforeDestroy () { | ||||
|       this.$nextTick(() => { | ||||
|         // if (super.componentWillUnmount) super.componentWillUnmount() | ||||
|         this.removeDocumentEvents() | ||||
|       }) | ||||
|     }, | ||||
|     mounted () { | ||||
|       this.$nextTick(() => { | ||||
|         // Snapshot testing cannot handle refs, so be sure to null-check this. | ||||
|  | @ -93,6 +87,12 @@ export default function createSlider (Component) { | |||
|         // this.setHandleRefs() | ||||
|       }) | ||||
|     }, | ||||
|     beforeDestroy () { | ||||
|       this.$nextTick(() => { | ||||
|         // if (super.componentWillUnmount) super.componentWillUnmount() | ||||
|         this.removeDocumentEvents() | ||||
|       }) | ||||
|     }, | ||||
|     computed: { | ||||
|       handlesRefs () { | ||||
|         const handlesRefs = [] | ||||
|  | @ -152,23 +152,10 @@ export default function createSlider (Component) { | |||
|         this.onEnd(e) | ||||
|         this.$emit('blur', e) | ||||
|       }, | ||||
|       addDocumentTouchEvents () { | ||||
|         // just work for Chrome iOS Safari and Android Browser | ||||
|         this.onTouchMoveListener = addEventListener(this.document, 'touchmove', this.onTouchMove) | ||||
|         this.onTouchUpListener = addEventListener(this.document, 'touchend', this.onEnd) | ||||
|       }, | ||||
|       addDocumentMouseEvents () { | ||||
|         this.onMouseMoveListener = addEventListener(this.document, 'mousemove', this.onMouseMove) | ||||
|         this.onMouseUpListener = addEventListener(this.document, 'mouseup', this.onEnd) | ||||
|       }, | ||||
|       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 */ | ||||
|       onMouseUp () { | ||||
|         if (this.handlesRefs[this.prevMovedHandleIndex]) { | ||||
|           this.handlesRefs[this.prevMovedHandleIndex].clickFocus() | ||||
|         } | ||||
|       }, | ||||
|       onMouseMove (e) { | ||||
|         if (!this.$refs.sliderRef) { | ||||
|  | @ -192,15 +179,9 @@ export default function createSlider (Component) { | |||
|           this.onKeyboard(e) | ||||
|         } | ||||
|       }, | ||||
|       focus () { | ||||
|         if (!this.disabled) { | ||||
|           this.handlesRefs[0].focus() | ||||
|         } | ||||
|       }, | ||||
|       blur () { | ||||
|         if (!this.disabled) { | ||||
|           this.handlesRefs[0].blur() | ||||
|         } | ||||
|       onClickMarkLabel (e, value) { | ||||
|         e.stopPropagation() | ||||
|         this.onChange({ value }) | ||||
|       }, | ||||
|       getSliderStart () { | ||||
|         const slider = this.$refs.sliderRef | ||||
|  | @ -217,6 +198,38 @@ export default function createSlider (Component) { | |||
|         const coords = slider.getBoundingClientRect() | ||||
|         return this.vertical ? coords.height : coords.width | ||||
|       }, | ||||
|       addDocumentTouchEvents () { | ||||
|         // just work for Chrome iOS Safari and Android Browser | ||||
|         this.onTouchMoveListener = addEventListener(this.document, 'touchmove', this.onTouchMove) | ||||
|         this.onTouchUpListener = addEventListener(this.document, 'touchend', this.onEnd) | ||||
|       }, | ||||
|       addDocumentMouseEvents () { | ||||
|         this.onMouseMoveListener = addEventListener(this.document, 'mousemove', this.onMouseMove) | ||||
|         this.onMouseUpListener = addEventListener(this.document, 'mouseup', this.onEnd) | ||||
|       }, | ||||
|       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 */ | ||||
|       }, | ||||
|       focus () { | ||||
|         if (!this.disabled) { | ||||
|           this.handlesRefs[0].focus() | ||||
|         } | ||||
|       }, | ||||
|       blur () { | ||||
|         if (!this.disabled) { | ||||
|           Object.keys(this.handlesRefs).forEach((key) => { | ||||
|             if (this.handlesRefs[key] && this.handlesRefs[key].blur) { | ||||
|               this.handlesRefs[key].blur() | ||||
|             } | ||||
|           }) | ||||
|         } | ||||
|       }, | ||||
|       calcValue (offset) { | ||||
|         const { vertical, min, max } = this | ||||
|         const ratio = Math.abs(Math.max(offset, 0) / this.getSliderLength()) | ||||
|  | @ -268,6 +281,9 @@ export default function createSlider (Component) { | |||
|           min, | ||||
|           className: `${prefixCls}-mark`, | ||||
|         }, | ||||
|         listeners: { | ||||
|           clickLabel: disabled ? noop : this.onClickMarkLabel, | ||||
|         }, | ||||
|       } | ||||
|       return ( | ||||
|         <div | ||||
|  | @ -275,6 +291,7 @@ export default function createSlider (Component) { | |||
|           class={sliderClassName} | ||||
|           onTouchstart={disabled ? noop : this.onTouchStart} | ||||
|           onMousedown={disabled ? noop : this.onMouseDown} | ||||
|           onMouseup={disabled ? noop : this.onMouseUp} | ||||
|           onKeydown={disabled ? noop : this.onKeyDown} | ||||
|           onFocus={disabled ? noop : this.onFocus} | ||||
|           onBlur={disabled ? noop : this.onBlur} | ||||
|  |  | |||
|  | @ -10,7 +10,7 @@ export default function createSliderWithTooltip (Component) { | |||
|     props: { | ||||
|       ...Component.props, | ||||
|       tipFormatter: PropTypes.func.def((value) => { return value }), | ||||
|       handleStyle: PropTypes.arrayOf(PropTypes.object), | ||||
|       handleStyle: PropTypes.oneOfType([PropTypes.object, PropTypes.arrayOf(PropTypes.object)]), | ||||
|       tipProps: PropTypes.object.def({}), | ||||
|     }, | ||||
|     data () { | ||||
|  | @ -40,8 +40,16 @@ export default function createSliderWithTooltip (Component) { | |||
|           prefixCls = 'rc-slider-tooltip', | ||||
|           overlay = tipFormatter(value), | ||||
|           placement = 'top', | ||||
|           visible = visible || false, | ||||
|           ...restTooltipProps } = tipProps | ||||
|           visible = false, | ||||
|           ...restTooltipProps | ||||
|         } = tipProps | ||||
| 
 | ||||
|         let handleStyleWithIndex | ||||
|         if (Array.isArray(handleStyle)) { | ||||
|           handleStyleWithIndex = handleStyle[index] || handleStyle[0] | ||||
|         } else { | ||||
|           handleStyleWithIndex = handleStyle | ||||
|         } | ||||
| 
 | ||||
|         const tooltipProps = { | ||||
|           props: { | ||||
|  | @ -63,7 +71,7 @@ export default function createSliderWithTooltip (Component) { | |||
|             mouseleave: () => this.handleTooltipVisibleChange(index, false), | ||||
|           }, | ||||
|           style: { | ||||
|             ...handleStyle[0], | ||||
|             ...handleStyleWithIndex, | ||||
|           }, | ||||
|         } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 wangxueliang
						wangxueliang