// vim: et:ts=4:sw=4:sts=4:ft=javascript 'use strict'; /*@ Ox.Checkbox Checkbox Element () -> Checkbox Element (options) -> Checkbox Element (options, self) -> Checkbox Element options Options object disabled if true, checkbox is disabled group if true, checkbox is part of a group id element id label Label (on the left side) labelWidth Label width title Title (on the right side) value if true, checkbox is checked width width in px self Shared private variable change triggered when value changes @*/ Ox.Checkbox = function(options, self) { self = self || {}; var that = Ox.Element({}, self) .defaults({ disabled: false, group: false, id: '', label: '', labelWidth: 64, overlap: 'none', title: '', value: false, width: 'auto' }) .options(options || {}) .addClass('OxCheckbox' + ( self.options.overlap == 'none' ? '' : ' OxOverlap' + Ox.toTitleCase(self.options.overlap) )) .attr({ disabled: self.options.disabled }); if (self.options.title) { self.options.width != 'auto' && that.css({ width: self.options.width + 'px' }); self.$title = Ox.Label({ disabled: self.options.disabled, id: self.options.id + 'Label', overlap: 'left', title: self.options.title, width: getTitleWidth() }) .css({float: 'right'}) .click(clickTitle) .appendTo(that); } if (self.options.label) { self.$label = Ox.Label({ overlap: 'right', textAlign: 'right', title: self.options.label, width: self.options.labelWidth }) .css({float: 'left'}) .appendTo(that); } self.$button = Ox.Button({ disabled: self.options.disabled, id: self.options.id + 'Button', title: ['none', 'check'], type: 'image', value: self.options.value ? 'check' : 'none' }) .addClass('OxCheckbox') .bindEvent({ change: clickButton }) .appendTo(that); function clickButton() { self.options.value = !self.options.value; that.triggerEvent('change', { value: self.options.value }); } function clickTitle() { !self.options.disabled && self.$button.trigger('click'); } function getTitleWidth() { return self.options.width - 16 - !!self.options.label * self.options.labelWidth; } self.setOption = function(key, value) { if (key == 'disabled') { that.attr({disabled: value}); self.$button.options({disabled: value}); self.$title && self.$title.options({disabled: value}); } else if (key == 'title') { self.$title.options({title: value}); } else if (key == 'value') { self.$button.toggleTitle(); } else if (key == 'width') { that.css({width: value + 'px'}); self.$title && self.$title.options({width: getTitleWidth()}); } }; // fixme: added for forms, duplicated, checked() shouldn't be neccessary that.value = function() { return self.options.checked; } return that; };