(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);