forked from tohe/wmdeit_kaform
				
			
		
			
	
	
		
			107 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
		
			
		
	
	
			107 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
|  | (function($K) | ||
|  | { | ||
|  |     $K.add('module', 'check', { | ||
|  |         init: function(app, context) | ||
|  |         { | ||
|  |             this.app = app; | ||
|  | 
 | ||
|  |             // defaults
 | ||
|  |             var defaults = { | ||
|  |                 target: false, | ||
|  |                 classname: 'ch' | ||
|  |             }; | ||
|  | 
 | ||
|  |             // context
 | ||
|  |             this.context = context; | ||
|  |             this.params = context.getParams(defaults); | ||
|  |             this.$element = context.getElement(); | ||
|  |             this.$target = context.getTarget(); | ||
|  | 
 | ||
|  |         }, | ||
|  |         // events
 | ||
|  |         onclick: function(e, element, type) | ||
|  |         { | ||
|  |             if (type === 'all') | ||
|  |             { | ||
|  |                 this._toggleAll(); | ||
|  |             } | ||
|  |         }, | ||
|  | 
 | ||
|  |         // public
 | ||
|  |         start: function() | ||
|  |         { | ||
|  |             this.$checkall = this.$element.find('[data-type=all]'); | ||
|  | 
 | ||
|  |             this.$checkboxes = this.$element.find('.' + this.params.classname); | ||
|  |             this.$checkboxes.on('click.kube.check', this._toggle.bind(this)); | ||
|  | 
 | ||
|  |             this._buildChecked(); | ||
|  |         }, | ||
|  |         stop: function() | ||
|  |         { | ||
|  |             this.$checkboxes.off('.kube.check'); | ||
|  |             this.$target.val(''); | ||
|  |     	}, | ||
|  | 
 | ||
|  |     	// private
 | ||
|  |     	_buildChecked: function() | ||
|  |     	{ | ||
|  |         	if (!this.params.target) return; | ||
|  | 
 | ||
|  |             var arr = this.$target.val().split(','); | ||
|  |             this.$checkboxes.each(function(node) | ||
|  |         	{ | ||
|  |             	if (arr.indexOf(node.value) !== -1) | ||
|  |             	{ | ||
|  |                 	node.checked = true; | ||
|  |             	} | ||
|  |             }); | ||
|  | 
 | ||
|  |             this.$checkall.attr('checked', this._isCheckedAll()); | ||
|  |     	}, | ||
|  |     	_setTarget: function() | ||
|  |     	{ | ||
|  |         	if (!this.params.target) return; | ||
|  | 
 | ||
|  |         	var arr = []; | ||
|  |         	this.$checkboxes.each(function(node) | ||
|  |         	{ | ||
|  |             	if (node.checked) | ||
|  |             	{ | ||
|  |                 	arr.push(node.value); | ||
|  |             	} | ||
|  |         	}); | ||
|  | 
 | ||
|  |         	var value = (arr.length === 0) ? '' : arr.join(','); | ||
|  | 
 | ||
|  |             this.$target.val(value); | ||
|  |             this.app.broadcast('check.set', this, this.$target); | ||
|  |     	}, | ||
|  |     	_isCheckedAll: function() | ||
|  |     	{ | ||
|  |         	var count = 0; | ||
|  |         	var len = this.$checkboxes.length; | ||
|  | 
 | ||
|  |         	this.$checkboxes.each(function(node) | ||
|  |         	{ | ||
|  |             	if (node.checked) | ||
|  |             	{ | ||
|  |                 	count++; | ||
|  |             	} | ||
|  |         	}); | ||
|  | 
 | ||
|  |         	return (len === count); | ||
|  |     	}, | ||
|  |     	_toggleAll: function(element) | ||
|  |     	{ | ||
|  |             var isChecked = this.$checkall.attr('checked'); | ||
|  |             this.$checkboxes.attr('checked', isChecked); | ||
|  |         	this._setTarget(); | ||
|  |     	}, | ||
|  |     	_toggle: function() | ||
|  |     	{ | ||
|  |         	this.$checkall.attr('checked', this._isCheckedAll()); | ||
|  |         	this._setTarget(); | ||
|  |     	} | ||
|  |     }); | ||
|  | })(Kube); |