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