/**
@name Edo.containers.FormItem
@class
@typeName formitem
@description 带label左侧文本显示框的容器,提供表单布局方式
@extend Edo.containers.Box
@example
*/
Edo.containers.FormItem = function(){
Edo.containers.FormItem.superclass.constructor.call(this);
};
Edo.containers.FormItem.extend(Edo.containers.Box, {
/**
@name Edo.containers.FormItem#defaultHeight
@property
@default 22
*/
defaultHeight: 22,
/**
@name Edo.containers.FormItem#minHeight
@property
@default 22
*/
minHeight: 22,
/**
@name Edo.containers.FormItem#border
@property
@default [0,0,0,0]
*/
border: [0,0,0,0],
/**
@name Edo.containers.FormItem#padding
@property
@default [0,0,0,0]
*/
padding: [0,0,0,0],
/**
@name Edo.containers.FormItem#labelPosition
@property
@type {String}
@default left
@description label方位.top/right/bottom/left
*/
labelPosition: 'left',
/**
@name Edo.containers.FormItem#label
@property
@type {String}
@description 文本
*/
label: '',
/**
@name Edo.containers.FormItem#labelWidth
@property
@type {String}
@description 文本宽度
*/
labelWidth: 60,
labelHeight: 22,
/**
@name Edo.containers.FormItem#labelAlign
@property
@type {String}
@description 文本偏移
*/
labelAlign: 'left',
/**
@name Edo.containers.FormItem#labelCls
@property
@type {String}
@description 文本cls
*/
labelCls: '',
/**
@name Edo.containers.FormItem#labelStyle
@property
@type {String}
@description 文本style
*/
labelStyle: '',
elCls: 'e-formitem e-box e-div',
forId: '', //如果没有设置, 可以focus第一个child
measure: function(){
Edo.containers.FormItem.superclass.measure.call(this);
if(this.labelPosition=='left' || this.labelPosition == 'right'){
this.realWidth += this.labelWidth;
}else{
this.realHeight += this.labelHeight;
}
this.measureSize();
},
getLayoutBox: function(){
var box = Edo.containers.FormItem.superclass.getLayoutBox.call(this);
switch(this.labelPosition){
case "top":
box.y += this.labelHeight;
box.height -= this.labelHeight;
break;
case "right":
box.width -= this.labelWidth;
break;
case "bottom":
box.height -= this.labelHeight;
break;
case "left":
box.x += this.labelWidth;
box.width -= this.labelWidth;
break;
}
box.right = box.x + box.width;
box.bottom = box.y + box.height;
return box;
},
doLabel: function(){
if(this.el){
this.labelCt.innerHTML = '
'+this.label+'
';
}
},
_setLabel: function(value){
if(this.label != value){
this.label = value;
this.doLabel();
}
},
_setLabelAlign: function(value){
if(this.labelAlign != value){
this.labelAlign = value;
this.doLabel();
}
},
_setLabelPosition: function(value){
if(this.labelPosition != value){
this.labelPosition = value;
this.relayout('labelPosition', value);
}
},
_setLabelStyle: function(value){
if(this.labelStyle != value){
this.labelStyle = value;
if(this.labelCt) Edo.util.Dom.applyStyles(this.labelCt, value);
}
},
_setLabelCls: function(value){
if(this.labelCls != value){
this.labelCls = value;
Edo.util.Dom.addClass(this.labelCt, this.labelCls);
}
},
_setLabelWidth: function(value){
value = parseInt(value);
if(isNaN(value)) throw new Error('labelWidth must is Number type');
if(this.labelWidth != value){
this.labelWidth = value;
this.relayout('labelWidth', value);
}
},
_setForId: function(value){
if(this.forId != value){
this.forId = value;
var cmp = Edo.getCmp(value);
if(cmp){
//点击事件,激发cmp的focus方法.
//获取cmp的focusEl,设置htmlFor
}else{
this.labelCt.dom.htmlFor = value;
}
}
},
syncSize: function(){ //设置组件尺寸,并设置容器子元素的所有尺寸!
Edo.containers.FormItem.superclass.syncSize.call(this);
var box = this.getLayoutBox();
var w = this.labelWidth, h = this.labelHeight;
var style = 'top:auto;right:auto;bottom:auto;left:auto;';
switch(this.labelPosition){
case "top":
w = box.width;
style += 'left:'+this.padding[3]+'px;top:'+this.padding[0]+'px';
break;
case "right":
h = box.height;
style += 'right:'+this.padding[1]+'px;top:'+this.padding[0]+'px';
break;
case "bottom":
w = box.width;
style += 'left:'+this.padding[3]+'px;bottom:'+this.padding[2]+'px';
break;
case "left":
h = box.height;
style += 'left:'+this.padding[3]+'px;top:'+this.padding[0]+'px';
break;
}
Edo.util.Dom.setSize(this.labelCt, w, h);
Edo.util.Dom.applyStyles(this.labelCt, style);
},
getInnerHtml: function(sb){
sb[sb.length] = '';
Edo.containers.Panel.superclass.getInnerHtml.call(this, sb);
},
createChildren: function(el){
Edo.containers.FormItem.superclass.createChildren.call(this, el);
this.scrollEl = this.el.lastChild;
this.labelCt = this.el.firstChild;
}
});
Edo.containers.FormItem.regType('formitem');