261 lines
6.6 KiB
Java
261 lines
6.6 KiB
Java
'use strict';
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
|
|
var _vueTypes = require('../../_util/vue-types');
|
|
|
|
var _vueTypes2 = _interopRequireDefault(_vueTypes);
|
|
|
|
var _classnames = require('classnames');
|
|
|
|
var _classnames2 = _interopRequireDefault(_classnames);
|
|
|
|
var _KeyCode = require('../../_util/KeyCode');
|
|
|
|
var _KeyCode2 = _interopRequireDefault(_KeyCode);
|
|
|
|
var _propsUtil = require('../../_util/props-util');
|
|
|
|
var _BaseMixin = require('../../_util/BaseMixin');
|
|
|
|
var _BaseMixin2 = _interopRequireDefault(_BaseMixin);
|
|
|
|
var _util = require('./util');
|
|
|
|
var _Star = require('./Star');
|
|
|
|
var _Star2 = _interopRequireDefault(_Star);
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
|
|
|
var rateProps = {
|
|
disabled: _vueTypes2['default'].bool,
|
|
value: _vueTypes2['default'].number,
|
|
defaultValue: _vueTypes2['default'].number,
|
|
count: _vueTypes2['default'].number,
|
|
allowHalf: _vueTypes2['default'].bool,
|
|
allowClear: _vueTypes2['default'].bool,
|
|
prefixCls: _vueTypes2['default'].string,
|
|
character: _vueTypes2['default'].any,
|
|
characterRender: _vueTypes2['default'].func,
|
|
tabIndex: _vueTypes2['default'].number,
|
|
autoFocus: _vueTypes2['default'].bool
|
|
};
|
|
|
|
function noop() {}
|
|
|
|
exports['default'] = {
|
|
name: 'Rate',
|
|
mixins: [_BaseMixin2['default']],
|
|
model: {
|
|
prop: 'value',
|
|
event: 'change'
|
|
},
|
|
props: (0, _propsUtil.initDefaultProps)(rateProps, {
|
|
defaultValue: 0,
|
|
count: 5,
|
|
allowHalf: false,
|
|
allowClear: true,
|
|
prefixCls: 'rc-rate',
|
|
tabIndex: 0,
|
|
character: '★'
|
|
}),
|
|
data: function data() {
|
|
var value = this.value;
|
|
if (!(0, _propsUtil.hasProp)(this, 'value')) {
|
|
value = this.defaultValue;
|
|
}
|
|
return {
|
|
sValue: value,
|
|
focused: false,
|
|
cleanedValue: null,
|
|
hoverValue: undefined
|
|
};
|
|
},
|
|
|
|
watch: {
|
|
value: function value(val) {
|
|
this.setState({
|
|
sValue: val
|
|
});
|
|
}
|
|
},
|
|
mounted: function mounted() {
|
|
var _this = this;
|
|
|
|
this.$nextTick(function () {
|
|
if (_this.autoFocus && !_this.disabled) {
|
|
_this.focus();
|
|
}
|
|
});
|
|
},
|
|
|
|
methods: {
|
|
onHover: function onHover(event, index) {
|
|
var hoverValue = this.getStarValue(index, event.pageX);
|
|
var cleanedValue = this.cleanedValue;
|
|
|
|
if (hoverValue !== cleanedValue) {
|
|
this.setState({
|
|
hoverValue: hoverValue,
|
|
cleanedValue: null
|
|
});
|
|
}
|
|
this.$emit('hoverChange', hoverValue);
|
|
},
|
|
onMouseLeave: function onMouseLeave() {
|
|
this.setState({
|
|
hoverValue: undefined,
|
|
cleanedValue: null
|
|
});
|
|
this.$emit('hoverChange', undefined);
|
|
},
|
|
onClick: function onClick(event, index) {
|
|
var allowClear = this.allowClear,
|
|
value = this.sValue;
|
|
|
|
var newValue = this.getStarValue(index, event.pageX);
|
|
var isReset = false;
|
|
if (allowClear) {
|
|
isReset = newValue === value;
|
|
}
|
|
this.onMouseLeave(true);
|
|
this.changeValue(isReset ? 0 : newValue);
|
|
this.setState({
|
|
cleanedValue: isReset ? newValue : null
|
|
});
|
|
},
|
|
onFocus: function onFocus() {
|
|
this.setState({
|
|
focused: true
|
|
});
|
|
this.$emit('focus');
|
|
},
|
|
onBlur: function onBlur() {
|
|
this.setState({
|
|
focused: false
|
|
});
|
|
this.$emit('blur');
|
|
},
|
|
onKeyDown: function onKeyDown(event) {
|
|
var keyCode = event.keyCode;
|
|
var count = this.count,
|
|
allowHalf = this.allowHalf;
|
|
var sValue = this.sValue;
|
|
|
|
if (keyCode === _KeyCode2['default'].RIGHT && sValue < count) {
|
|
if (allowHalf) {
|
|
sValue += 0.5;
|
|
} else {
|
|
sValue += 1;
|
|
}
|
|
this.changeValue(sValue);
|
|
event.preventDefault();
|
|
} else if (keyCode === _KeyCode2['default'].LEFT && sValue > 0) {
|
|
if (allowHalf) {
|
|
sValue -= 0.5;
|
|
} else {
|
|
sValue -= 1;
|
|
}
|
|
this.changeValue(sValue);
|
|
event.preventDefault();
|
|
}
|
|
this.$emit('keydown', event);
|
|
},
|
|
getStarDOM: function getStarDOM(index) {
|
|
return this.$refs['stars' + index].$el;
|
|
},
|
|
getStarValue: function getStarValue(index, x) {
|
|
var value = index + 1;
|
|
if (this.allowHalf) {
|
|
var starEle = this.getStarDOM(index);
|
|
var leftDis = (0, _util.getOffsetLeft)(starEle);
|
|
var width = starEle.clientWidth;
|
|
if (x - leftDis < width / 2) {
|
|
value -= 0.5;
|
|
}
|
|
}
|
|
return value;
|
|
},
|
|
focus: function focus() {
|
|
if (!this.disabled) {
|
|
this.$refs.rateRef.focus();
|
|
}
|
|
},
|
|
blur: function blur() {
|
|
if (!this.disabled) {
|
|
this.$refs.rateRef.blur();
|
|
}
|
|
},
|
|
changeValue: function changeValue(value) {
|
|
if (!(0, _propsUtil.hasProp)(this, 'value')) {
|
|
this.setState({
|
|
sValue: value
|
|
});
|
|
}
|
|
this.$emit('change', value);
|
|
}
|
|
},
|
|
render: function render() {
|
|
var h = arguments[0];
|
|
|
|
var _getOptionProps = (0, _propsUtil.getOptionProps)(this),
|
|
count = _getOptionProps.count,
|
|
allowHalf = _getOptionProps.allowHalf,
|
|
prefixCls = _getOptionProps.prefixCls,
|
|
disabled = _getOptionProps.disabled,
|
|
tabIndex = _getOptionProps.tabIndex;
|
|
|
|
var sValue = this.sValue,
|
|
hoverValue = this.hoverValue,
|
|
focused = this.focused;
|
|
|
|
var stars = [];
|
|
var disabledClass = disabled ? prefixCls + '-disabled' : '';
|
|
var character = (0, _propsUtil.getComponentFromProp)(this, 'character');
|
|
var characterRender = this.characterRender || this.$scopedSlots.characterRender;
|
|
for (var index = 0; index < count; index++) {
|
|
var starProps = {
|
|
props: {
|
|
index: index,
|
|
count: count,
|
|
disabled: disabled,
|
|
prefixCls: prefixCls + '-star',
|
|
allowHalf: allowHalf,
|
|
value: hoverValue === undefined ? sValue : hoverValue,
|
|
character: character,
|
|
characterRender: characterRender,
|
|
focused: focused
|
|
},
|
|
on: {
|
|
click: this.onClick,
|
|
hover: this.onHover
|
|
},
|
|
key: index,
|
|
ref: 'stars' + index
|
|
};
|
|
stars.push(h(_Star2['default'], starProps));
|
|
}
|
|
return h(
|
|
'ul',
|
|
{
|
|
'class': (0, _classnames2['default'])(prefixCls, disabledClass),
|
|
on: {
|
|
'mouseleave': disabled ? noop : this.onMouseLeave,
|
|
'focus': disabled ? noop : this.onFocus,
|
|
'blur': disabled ? noop : this.onBlur,
|
|
'keydown': disabled ? noop : this.onKeyDown
|
|
},
|
|
attrs: {
|
|
tabIndex: disabled ? -1 : tabIndex,
|
|
|
|
role: 'radiogroup'
|
|
},
|
|
|
|
ref: 'rateRef' },
|
|
[stars]
|
|
);
|
|
}
|
|
}; |