📄 input.js
字号:
Class("linb.UI.Input", ["linb.UI.Widget","linb.absValue"] ,{
Instance:{
_setTB:function(type){
var profile=this.get(0), p=profile.properties, o, t;
if(!profile.host|| !p.tipsBinder)return;
t = profile.tips = profile.tips||p.tips||'';
o = profile.host[p.tipsBinder];
if(o && o.KEY=='linb.UI.Div'){
//use innerHTML, not setHtml
o.get(0).domNode.innerHTML = t.charAt(0)=='$'?linb.wrapRes(t):t;
o.reBoxing().css('color', type==1?'gray':type==2?'red':'#000');
}
},
activate:function(){
var profile = this.get(0);
if(profile.domNode){
var node=profile.getSubNode('INPUT').get(0);
node.focus();
if(!node.readOnly && node.select)node.select();
}
return this;
},
_setCtrlValue:function(value){
if(_.isNull(value) || !_.exists(value))value='';
return this.each(function(profile){
profile.getSubNode('INPUT').attr('value',value+"");
});
},
_getCtrlValue:function(){
var profile=this.get(0);
return profile.getSubNode('INPUT').attr('value');
},
_setDirtyMark:function(){
return this.each(function(profile){
if(!profile.properties.dirtyMark)return;
var properties = profile.properties,
o=profile.getSubNode('INPUT'),
cls=profile.box,
box=profile.boxing(),
d=linb.UI.$css_tag_dirty,
v=linb.UI.$css_tag_invalid,
flag=properties.value !== properties.$UIvalue;
//dirty mark
if(profile.beforeDirtyMark && false===box.beforeDirtyMark(profile,flag)){}
else{
if(flag)
o.addClass(d);
else
o.removeClass(d);
}
//format statux
if(profile.beforeFormatMark && false===box.beforeFormatMark(profile, profile.inValid==2)){}
else{
var err = profile.getSubNode('ERROR');
if(profile.inValid==2){
o.addClass(v);
err.css('display','block');
}else{
o.removeClass(v);
err.css('display','none');
}
}
if(profile.inValid==2){
//display tips
profile.tips = properties.tipsErr || properties.tips;
if(properties.mask)
_.asyRun(function(){
box.setUIValue(o.get(0).value=profile.$Mask)
});
}else{
if(profile.inValid==1)
profile.tips = properties.tips;
else{
profile.tips = properties.tipsOK || properties.tips;
}
}
box._setTB(profile.inValid);
});
}
},
Initialize:function(){
//modify default template fro shell
var t = this.getTemplate();
_.merge(t.FRAME.BORDER,{
BOX:{
WRAP:{
tagName : 'div',
INPUT:{
tagName : 'input',
type : '{type}',
tabindex:'{tabindex}',
cursor:'{cursor}',
style:'{_css}'
}
}
}
},'all');
t.FRAME.ERROR = {};
this.setTemplate(t)
},
Static:{
_maskMap:{
'~':'[+-]',
'1':'[0-9]',
'a':'[A-Za-z]',
'*':'[A-Za-z0-9]'
},
_maskSpace:'_',
Appearances:{
KEY:{
'font-family': '"Verdana", "Helvetica", "sans-serif"',
position:'relative'
},
BORDER:{
'line-height':'0px',
'font-size':'0px'
},
WRAP:{
left:0,
//don't change it
top:'2px',
//for firefox bug: cursor not show
position:'absolute',
overflow:linb.browser.gek?'auto':'hidden'
},
BOX:{
left:0,
top:0,
position:'absolute',
'background-color':'#fff',
'border':'solid 1px #648CB4'
},
'BOX-focus, BOX-mouseover':{
'border-color':'#FAE100'
},
INPUT:{
'background-color':'transparent',
border:0,
margin:0,
'margin-top':linb.browser.ie?'-1px':null,
'font-size':'12px',
position:'relative',
overflow:'auto',
'overflow-y':(linb.browser.gek||linb.browser.ie)?'auto':'',
'overflow-x':(linb.browser.gek||linb.browser.ie)?'hidden':''
},
ERROR:{
width:'16px',
height:'16px',
position:'absolute',
right:'2px',
top:'2px',
display:'none',
'font-size':0,
background: linb.UI.$bg('icons.gif', 'no-repeat left -244px', true),
'z-index':'50'
},
//border<<<
'.setting-linb-input':{
'border-top-width':'1px',
'border-bottom-width':'1px',
'border-left-width':'1px',
'border-right-width':'1px'
},
'KEY-b-t':{
height:'2px',
top:'-1px',
background: linb.UI.$bg('vertical.gif', 'repeat-x left top','Input')
},
'KEY-b-b':{
height:'2px',
bottom:'-1px',
background: linb.UI.$bg('vertical.gif', 'repeat-x left bottom','Input')
},
'BOX-focus KEY-b-t, BOX-focus KEY-b-b, BOX-mouseover KEY-b-t, BOX-mouseover KEY-b-b':{
$order:1,
'background-image':linb.UI.$bg('vertical_mouseover.gif','','Input')
},
'KEY-b-l':{
width:'2px',
left:'-1px',
background: linb.UI.$bg('horizontal.gif', 'repeat-y left top','Input')
},
'KEY-b-r':{
width:'2px',
right:'-1px',
background: linb.UI.$bg('horizontal.gif', 'repeat-y right top','Input')
},
'BOX-focus KEY-b-l, BOX-focus KEY-b-r, BOX-mouseover KEY-b-l, BOX-mouseover KEY-b-r':{
$order:1,
'background-image': linb.UI.$bg('horizontal_mouseover.gif','','Input')
},
'KEY-b-lt':{
width:'2px',
height:'2px',
left:'-1px',
top:'-1px',
background: linb.UI.$bg('corner.gif', 'no-repeat left top','Input')
},
'KEY-b-rt':{
width:'2px',
height:'2px',
right:'-1px',
top:'-1px',
background: linb.UI.$bg('corner.gif', 'no-repeat right top','Input')
},
'KEY-b-rb':{
width:'2px',
height:'2px',
right:'-1px',
bottom:'-1px',
background: linb.UI.$bg('corner.gif', 'no-repeat right bottom','Input')
},
'KEY-b-lb':{
width:'2px',
height:'2px',
left:'-1px',
bottom:'-1px',
background: linb.UI.$bg('corner.gif', 'no-repeat left bottom','Input')
},
'BOX-focus KEY-b-lt, BOX-focus KEY-b-rt, BOX-focus KEY-b-rb, BOX-focus KEY-b-lb, BOX-mouseover KEY-b-lt, BOX-mouseover KEY-b-rt, BOX-mouseover KEY-b-rb, BOX-mouseover KEY-b-lb':{
$order:1,
'background-image': linb.UI.$bg('corner_mouseover.gif','','Input')
}
//border>>>
},
Behaviors:{
HoverEffected:{BOX:['BOX']},
NavKeys:{INPUT:1},
INPUT:{
onChange:function(profile, e, src){
var o=profile.inValid;
profile.boxing().setUIValue(src.value);
//input/textarea is special, ctrl value will be set before the $UIvalue
profile.properties.$UIvalue=src.value;
if(o!==profile.inValid) if(profile.domNode)profile.boxing()._setDirtyMark();
},
//if properties.mask exists, onHotKeyxxx wont be tigger any more
onKeydown:function(profile, e, src){
var p=profile.properties,
m=p.multiLines,
b=profile.box,
evt=linb.Event,
k=evt.getKey(e);
//fire onchange first
if(k[0]=='enter'&& (!m||k[3]))
linb([src]).onChange();
if(p.mask){
if(k[0].length>1)profile.$ignore=true;
else delete profile.$ignore;
switch(k[0]){
case 'backspace':
b._changeMask(profile,src,'',false);
return false;
case 'delete':
b._changeMask(profile,src,'');
return false;
}
}
},
onKeypress:function(profile, e, src){
var p=profile.properties,cls=profile.box,map=cls._maskMap;
if(p.mask){
if(profile.$ignore){
delete profile.$ignore;
return true;
}
var evt=linb.Event,
k=evt.getKey(e);
if(k[1]||k[3])return true;
cls._changeMask(profile,src,k[0],true);
return false;
}
},
onKeyup:function(profile, e, src){
var p=profile.properties;
if(p.dynCheck){
profile.box._checkValid(profile, src.value);
profile.boxing()._setDirtyMark();
}
},
onFocus:function(profile, e, src){
var p=profile.properties,b=profile.box;
if(p.disabled)return false;
if(profile.onFocus)profile.boxing().onFocus(profile);
profile.getSubNode('BORDER').tagClass('-focus');
//if no value, add mask
if(p.mask){
//ondrop in opera or safari will trigger onfocus event.
if(linb.browser.opr ||linb.browser.kde)
b._maskF(profile,src);
if(!src.value)
_.asyRun(function(){
profile.boxing().setUIValue(src.value=profile.$Mask);
b._setCaret(profile,src)
});
}
//show tips color
profile.boxing()._setTB(3);
},
onBlur:function(profile, e, src){
var p=profile.properties;
if(p.disabled)return false;
if(profile.onBlur)profile.boxing().onBlur(profile);
profile.getSubNode('BORDER').tagClass('-focus',false);
//onblur check it
if(p.$UIvalue==src.value)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -