// vim: et:ts=4:sw=4:sts=4:ft=js /*@ Ox.Checkbox Checkbox Element () -> Checkbox Element (options) -> Checkbox Element (options, self) -> Checkbox Element options Options object disabled if true, checkbox is disabled id element id group if true, checkbox is part of a group checked if true, checkbox is checked title text on label width width in px self 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 get current checked state () -> returns self.options.checked @*/ that.checked = function() { return self.options.checked; } /*@ toggleChecked toggle current checked state () -> toggle state, returns Checkbox Element @*/ that.toggleChecked = function() { self.$button.toggleTitle(); return that; } // fixme: added for forms, duplicated, checked() shouldn't be neccessary that.value = function() { return self.options.checked; } return that; };