// vim: et:ts=4:sw=4:sts=4:ft=javascript /*@ Ox.CheckboxGroup <f:Ox.Element> CheckboxGroup Object () -> <f> CheckboxGroup Object (options) -> <f> CheckboxGroup Object (options, self) -> <f> CheckboxGroup Object options <o> Options object checkboxes <a|[]> array of checkboxes max <n|1> integer min <n|1> integer width <n> integer, width in px self <o> shared private variable change <!> triggered when checked property changes passes {checked, id, title} @*/ Ox.CheckboxGroup = function(options, self) { self = self || {}; var that = Ox.Element({}, self) .defaults({ checkboxes: [], max: 1, min: 1, width: 256 }) .options(options || {}) .addClass('OxCheckboxGroup'); self.optionGroup = new Ox.OptionGroup( self.options.checkboxes, self.options.min, self.options.max); self.options.checkboxes = self.optionGroup.init(); $.extend(self, { $checkboxes: [], checkboxWidth: $.map(Ox.divideInt( self.options.width + (self.options.checkboxes.length - 1) * 6, self.options.checkboxes.length ), function(v, i) { return v + (i < self.options.checkboxes.length - 1 ? 10 : 0); }) }); self.options.checkboxes.forEach(function(checkbox, position) { var id = self.options.id + Ox.toTitleCase(checkbox.id) self.$checkboxes[position] = Ox.Checkbox($.extend(checkbox, { group: true, id: id, width: self.checkboxWidth[position] })) .bindEvent('change', function() { change(position); }) .appendTo(that); }); function change(pos) { var toggled = self.optionGroup.toggle(pos); //Ox.print('change', pos, 'toggled', toggled) if (toggled.length) { toggled.forEach(function(pos, i) { self.$checkboxes[pos].toggleChecked(); }); that.triggerEvent('change', { checked: $.map(self.optionGroup.checked(), function(v, i) { return self.options.checkboxes[v].id; }) }); } } return that; };