// vim: et:ts=4:sw=4:sts=4:ft=js /*@ Ox.Checkbox <f:Ox.Element> Checkbox Element () -> <f> Checkbox Element (options) -> <f> Checkbox Element (options, self) -> <f> Checkbox Element options <o> Options object disabled <b> if true, checkbox is disabled id <s> element id group <b> if true, checkbox is part of a group checked <b> if true, checkbox is checked title <s> text on label width <n> width in px self <o> Shared private variable change <!> triggered when checked property changes, passes {checked, id, title} @*/ Ox.Checkbox = function(options, self) { var self = self || {}, that = new Ox.Element({}, self) .defaults({ disabled: false, id: '', group: false, checked: false, overlap: 'none', title: '', width: 'auto' }) .options(options || {}) .addClass('OxCheckbox' + (self.options.overlap == 'none' ? '' : ' OxOverlap' + Ox.toTitleCase(self.options.overlap)) ) .attr(self.options.disabled ? { disabled: 'disabled' } : {}); if (self.options.title) { self.options.width != 'auto' && that.css({ width: self.options.width + 'px' }); self.$title = new Ox.Label({ disabled: self.options.disabled, id: self.options.id + 'Label', overlap: 'left', title: self.options.title, width: self.options.width - 16 }) .css({ float: 'right' }) .click(clickTitle) .appendTo(that); } self.$button = new Ox.Button({ disabled: self.options.disabled, id: self.options.id + 'Button', title: [ {id: 'none', title: 'none', selected: !self.options.checked}, {id: 'check', title: 'check', selected: self.options.checked} ], type: 'image' }) .addClass('OxCheckbox') .click(clickButton) .appendTo(that); function clickButton() { self.options.checked = !self.options.checked; // click will have toggled the button, // if it is part of a group, we have to revert that self.options.group && that.toggleChecked(); that.triggerEvent('change', { checked: self.options.checked, id: self.options.id, title: self.options.title }); } function clickTitle() { !self.options.disabled && self.$button.trigger('click'); } self.setOption = function(key, value) { if (key == 'checked') { that.toggleChecked(); } }; /*@ checked <f> get current checked state () -> <b> returns self.options.checked @*/ that.checked = function() { return self.options.checked; } /*@ toggleChecked <f> toggle current checked state () -> <f> toggle state, returns Checkbox Element @*/ that.toggleChecked = function() { self.$button.toggleTitle(); return that; } return that; };