117 lines
3.4 KiB
JavaScript
117 lines
3.4 KiB
JavaScript
// 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;
|
|
}
|
|
|
|
// fixme: added for forms, duplicated, checked() shouldn't be neccessary
|
|
that.value = function() {
|
|
return self.options.checked;
|
|
}
|
|
|
|
return that;
|
|
|
|
};
|