80 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 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);
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| }); | 
