You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
1.9 KiB
80 lines
1.9 KiB
import { createNamespace } from '../utils';
|
|
import { CheckboxMixin } from '../mixins/checkbox';
|
|
|
|
var _createNamespace = createNamespace('checkbox'),
|
|
createComponent = _createNamespace[0],
|
|
bem = _createNamespace[1];
|
|
|
|
export default createComponent({
|
|
mixins: [CheckboxMixin({
|
|
bem: bem,
|
|
role: 'checkbox',
|
|
parent: 'vanCheckbox'
|
|
})],
|
|
computed: {
|
|
checked: {
|
|
get: function get() {
|
|
if (this.parent) {
|
|
return this.parent.value.indexOf(this.name) !== -1;
|
|
}
|
|
|
|
return this.value;
|
|
},
|
|
set: function set(val) {
|
|
if (this.parent) {
|
|
this.setParentValue(val);
|
|
} else {
|
|
this.$emit('input', val);
|
|
}
|
|
}
|
|
}
|
|
},
|
|
watch: {
|
|
value: function value(val) {
|
|
this.$emit('change', val);
|
|
}
|
|
},
|
|
methods: {
|
|
// @exposed-api
|
|
toggle: function toggle(checked) {
|
|
var _this = this;
|
|
|
|
if (checked === void 0) {
|
|
checked = !this.checked;
|
|
}
|
|
|
|
// When toggle method is called multiple times at the same time,
|
|
// only the last call is valid.
|
|
// This is a hack for usage inside Cell.
|
|
clearTimeout(this.toggleTask);
|
|
this.toggleTask = setTimeout(function () {
|
|
_this.checked = checked;
|
|
});
|
|
},
|
|
setParentValue: function setParentValue(val) {
|
|
var parent = this.parent;
|
|
var value = parent.value.slice();
|
|
|
|
if (val) {
|
|
if (parent.max && value.length >= parent.max) {
|
|
return;
|
|
}
|
|
/* istanbul ignore else */
|
|
|
|
|
|
if (value.indexOf(this.name) === -1) {
|
|
value.push(this.name);
|
|
parent.$emit('input', value);
|
|
}
|
|
} else {
|
|
var index = value.indexOf(this.name);
|
|
/* istanbul ignore else */
|
|
|
|
if (index !== -1) {
|
|
value.splice(index, 1);
|
|
parent.$emit('input', value);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}); |