};
Roo.extend(Roo.bootstrap.CheckBox, Roo.bootstrap.Input, {
-
- invalidClass : "has-warning",
- validClass : "has-success",
+
inputType: 'checkbox',
inputValue: 1,
valueOff: 0,
tag: 'input',
id : id,
type : this.inputType,
- value : this.inputType == 'radio' ? this.inputValue : ((!this.checked) ? this.valueOff : this.inputValue),
+ value : this.inputValue,
cls : 'roo-' + this.inputType, //'form-box',
placeholder : this.placeholder || ''
};
+
+ var hidden = {
+ tag: 'input',
+ type : 'hidden',
+ cls : 'roo-hidden-value',
+ value : this.checked ? this.valueOff : this.inputValue
+ };
+
if (this.weight) { // Validity check?
cfg.cls += " " + this.inputType + "-" + this.weight;
}
if(this.checked){
input.checked = this.checked;
+
}
+
if (this.name) {
- input.name = this.name;
+ hidden.name = this.name;
+ input.name = '_hidden_' + this.name;
}
if (this.size) {
}
});
- var inputblock = input;
+ var inputblock = {
+ tag: 'span',
+ cn : [
+ input,
+ hidden
+ ]
+ };
if (this.before || this.after) {
}
inputblock.cn.push(input);
+ inputblock.cn.push(hidden);
if (this.after) {
inputblock.cn.push({
}
if (align ==='left' && this.fieldLabel.length) {
- Roo.log("left and has label");
+// Roo.log("left and has label");
cfg.cn = [
{
];
} else if ( this.fieldLabel.length) {
- Roo.log(" label");
+// Roo.log(" label");
cfg.cn = [
{
} else {
- Roo.log(" no label && no align");
+// Roo.log(" no label && no align");
cfg.cn = [ inputblock ] ;
}
+
if(this.boxLabel){
var boxLabelCfg = {
tag: 'label',
//'for': id, // box label is handled by onclick - so no for...
cls: 'box-label',
html: this.boxLabel
- }
+ };
if(this.tooltip){
boxLabelCfg.tooltip = this.tooltip;
{
return this.el.select('input.roo-' + this.inputType,true).first();
},
+ hiddenEl: function ()
+ {
+ return this.el.select('input.hidden-value',true).first();
+ },
labelEl: function()
{
return this.labelEl();
},
+ boxLabelEl: function()
+ {
+ return this.el.select('label.box-label',true).first();
+ },
+
initEvents : function()
{
// Roo.bootstrap.CheckBox.superclass.initEvents.call(this);
this.fireEvent('check', this, true);
}
+ this.validate();
+
return;
}
this.inputEl().dom.checked = state;
- this.inputEl().dom.value = state ? this.inputValue : this.valueOff;
+
+ this.hiddenEl().dom.value = state ? this.inputValue : this.valueOff;
if(suppressEvent !== true){
this.fireEvent('check', this, state);
}
+
+ this.validate();
},
getValue : function()
return this.getGroupValue();
}
- return this.inputEl().getValue();
+ return this.hiddenEl() ? this.hiddenEl().dom.value : this.value;
},
{
if(this.inputType == 'radio'){
this.setGroupValue(v, suppressEvent);
- this.validate();
return;
}
this.setChecked(((typeof(v) == 'undefined') ? this.checked : (String(v) === String(this.inputValue))), suppressEvent);
+
this.validate();
},
this.fireEvent('check', this, true);
}
+ this.validate();
+
return;
},
{
if(
this.disabled ||
- (this.inputType == 'radio' && this.getValue().length) ||
- (this.inputType == 'checkbox' && this.validateGroup())
+ (this.inputType == 'radio' && this.validateRadio()) ||
+ (this.inputType == 'checkbox' && this.validateCheckbox())
){
this.markValid();
return true;
return false;
},
- validateGroup : function()
+ validateRadio : function()
+ {
+ if(this.allowBlank){
+ return true;
+ }
+
+ var valid = false;
+
+ Roo.each(this.el.up('form').select('input[name='+this.name+']', true).elements, function(e){
+ if(!e.dom.checked){
+ return;
+ }
+
+ valid = true;
+
+ return false;
+ });
+
+ return valid;
+ },
+
+ validateCheckbox : function()
{
if(!this.groupId){
- return (this.getValue() == this.inputValue) ? true : false;
+ return (this.getValue() == this.inputValue || this.allowBlank) ? true : false;
}
var group = Roo.bootstrap.CheckBox.get(this.groupId);
*/
markValid : function()
{
+ if(this.allowBlank){
+ return;
+ }
+
var _this = this;
this.fireEvent('valid', this);
+ var label = Roo.bootstrap.FieldLabel.get(this.name + '-group');
+
+ if(this.groupId){
+ label = Roo.bootstrap.FieldLabel.get(this.groupId + '-group');
+ }
+
+ if(label){
+ label.markValid();
+ }
+
if(this.inputType == 'radio'){
Roo.each(this.el.up('form').select('input[name='+this.name+']', true).elements, function(e){
- e.removeClass([_this.invalidClass, _this.validClass]);
- e.addClass(_this.validClass);
+ e.findParent('.form-group', false, true).removeClass([_this.invalidClass, _this.validClass]);
+ e.findParent('.form-group', false, true).addClass(_this.validClass);
});
return;
}
if(!this.groupId){
- this.el.removeClass([this.invalidClass, this.validClass]);
- this.el.addClass(this.validClass);
+ this.el.findParent('.form-group', false, true).removeClass([this.invalidClass, this.validClass]);
+ this.el.findParent('.form-group', false, true).addClass(this.validClass);
return;
}
}
for(var i in group){
- group[i].el.removeClass([this.invalidClass, this.validClass]);
- group[i].el.addClass(this.validClass);
+ group[i].el.findParent('.form-group', false, true).removeClass([this.invalidClass, this.validClass]);
+ group[i].el.findParent('.form-group', false, true).addClass(this.validClass);
}
},
*/
markInvalid : function(msg)
{
+ if(this.allowBlank){
+ return;
+ }
+
var _this = this;
this.fireEvent('invalid', this, msg);
+ var label = Roo.bootstrap.FieldLabel.get(this.name + '-group');
+
+ if(this.groupId){
+ label = Roo.bootstrap.FieldLabel.get(this.groupId + '-group');
+ }
+
+ if(label){
+ label.markInvalid();
+ }
+
if(this.inputType == 'radio'){
Roo.each(this.el.up('form').select('input[name='+this.name+']', true).elements, function(e){
- e.removeClass([_this.invalidClass, _this.validClass]);
- e.addClass(_this.invalidClass);
+ e.findParent('.form-group', false, true).removeClass([_this.invalidClass, _this.validClass]);
+ e.findParent('.form-group', false, true).addClass(_this.invalidClass);
});
return;
}
if(!this.groupId){
- this.el.removeClass([this.invalidClass, this.validClass]);
- this.el.addClass(this.invalidClass);
+ this.el.findParent('.form-group', false, true).removeClass([this.invalidClass, this.validClass]);
+ this.el.findParent('.form-group', false, true).addClass(this.invalidClass);
return;
}
var group = Roo.bootstrap.CheckBox.get(this.groupId);
-
+
if(!group){
return;
}
for(var i in group){
- group[i].el.removeClass([this.invalidClass, this.validClass]);
- group[i].el.addClass(this.invalidClass);
+ group[i].el.findParent('.form-group', false, true).removeClass([this.invalidClass, this.validClass]);
+ group[i].el.findParent('.form-group', false, true).addClass(this.invalidClass);
+ }
+
+ },
+
+ disable : function()
+ {
+ if(this.inputType != 'radio'){
+ Roo.bootstrap.CheckBox.superclass.disable.call(this);
+ return;
}
+ var _this = this;
+
+ if(this.rendered){
+ Roo.each(this.el.up('form').select('input[name='+this.name+']', true).elements, function(e){
+ _this.getActionEl().addClass(this.disabledClass);
+ e.dom.disabled = true;
+ });
+ }
+
+ this.disabled = true;
+ this.fireEvent("disable", this);
+ return this;
+ },
+
+ enable : function()
+ {
+ if(this.inputType != 'radio'){
+ Roo.bootstrap.CheckBox.superclass.enable.call(this);
+ return;
+ }
+
+ var _this = this;
+
+ if(this.rendered){
+ Roo.each(this.el.up('form').select('input[name='+this.name+']', true).elements, function(e){
+ _this.getActionEl().removeClass(this.disabledClass);
+ e.dom.disabled = false;
+ });
+ }
+
+ this.disabled = false;
+ this.fireEvent("enable", this);
+ return this;
}
+
});
Roo.apply(Roo.bootstrap.CheckBox, {