📄 ig_edit.js
字号:
this.maxLength=this.intI(prop0,i++);
this.spinDelta=ig_csom.isEmpty(o=this.valI(prop0,i++))?1:parseFloat(o);
this.spinOnArrows=!ig_csom.isEmpty(prop0[i++]);
this.spinOnlyOneField=!ig_csom.isEmpty(prop0[i++]);
this.hideEnter=!ig_csom.isEmpty(prop0[i++]);
this.selectionOnFocus=this.intI(prop0,i++)-1;
this.allowAlt=!ig_csom.isEmpty(prop0[i++]);
this.roll=!ig_csom.isEmpty(prop0[i++]);
this.css=this.intI(prop0,i++);
if(this.css>=0)
{
this.butP=-1;
this.butL=1;
this.buttons=new Array(3);
for(j=0;j<3;j++)
{
if((e=ig_csom.getElementById(id+"_b"+j))==null)i+=4;
else
{
this.initButElem(e);
e.setAttribute("editID",id+","+j);
o=new Object();
o.elem=e;
o.img=new Array(4);
//images
for(ii=0;ii<4;ii++)o.img[ii]=this.valI(prop0,i++);
o.state=0;
this.buttons[j]=o;
}
}
ii=1;
if((o=this.intI(prop0,i++))<0)ii=8;
else{while(o++<3)ii/=2; while(o-->4)ii*=2;}
this.spinSpeedUp=ii;
this.spinOnReadOnly=!ig_csom.isEmpty(prop0[i++]);
this.spinDelay=this.intI(prop0,i++);
this.spinFocus=!ig_csom.isEmpty(prop0[i++]);
this.ccss=new Array(4);
for(ii=0;ii<4;ii++)
{
o=this.valI(prop0,i++);
if(o.length>0)o=" "+o;
this.ccss[ii]=o;
}
}
//
this.repaint=function()
{
if(this.elem.value==this.text)return;
this.elem.value=this.text;
}
//
this.elem=e=ig_csom.getElementById(id+"_t");
if(igedit_all.submit!=true && e.form!=null)
{
ig_csom.addEventListener(e.form,"submit",igedit_event);
igedit_all.submit=true;
}
o=e.parentNode;
ii=e.offsetHeight;
if(ii>2)o.height=ii;
o.removeChild(e);
//
ig_csom.addEventListener(e,"keydown",igedit_event);
ig_csom.addEventListener(e,"keypress",igedit_event);
ig_csom.addEventListener(e,"keyup",igedit_event);
ig_csom.addEventListener(e,"focus",igedit_event);
ig_csom.addEventListener(e,"blur",igedit_event);
ig_csom.addEventListener(e,"mousedown",igedit_event);
ig_csom.addEventListener(e,"mouseup",igedit_event);
ig_csom.addEventListener(e,"mousemove",igedit_event);
ig_csom.addEventListener(e,"mouseover",igedit_event);
ig_csom.addEventListener(e,"mouseout",igedit_event);
//
o.appendChild(e);
if(ii!=null && ii>5)
{
//server flag
if(ig_csom.notEmpty(j=elem.style.height))if(j.indexOf("%")<0){j=1; e.style.height=ii;}
o=this.buttons;
if(o!=null && o[1]!=null)if((o=o[1].elem)!=null)
{
if(j==1){o.style.height=j=Math.ceil(ii/2); this.buttons[2].elem.style.height=ii-j;}
for(j=0;j<4;j++){o=o.parentNode; if(o.tagName=="TABLE"){o.style.height=ii;break;}}
}
}
//
this.ID=id;
if(id.indexOf("x_")==0)this.ID_=id.substring(1);
e.setAttribute("editID",id);
if(e.createTextRange!=null)this.tr=e.createTextRange();
//
this.k0=this.sel0=0;
this.getEnabled=function(){return !this.elem.disabled;}
this.setEnabled=function(v)
{
if(this.elem.disabled==!v)return; this.elem.disabled=!v;
for(var i=0;i<3;i++)this.butState(i,v?0:4);
}
this.getVisible=function(){return this.Element.style.display!="none";}
this.setVisible=function(v,x,y,w,h)
{
var d,s0=this.Element,s1=this.elem,hd=this.hd;
if(!v && this.fcs>0)s1.blur();
s0.style.display=v?"":"none";
s0.style.visibility=v?"visible":"hidden";
if(!v)return;
if(hd==null)
{
hd=s0.offsetHeight; d=s1.offsetHeight;
if(hd==null || hd<5 || d==null || d<5)hd=0;
else if((hd-=d)<0)hd=0;
this.hd=hd;
}
s0=s0.style; s1=s1.style;
if(x!=null){s0.position="absolute"; s0.left=x; s0.top=y;}
if(w!=null){s0.width=w; s1.width="100%";}
if(h!=null)
{
s0.height=h;
s1.height=(h-=hd);
if(this.buttons!=null)
{
d=this.buttons[0];
if(d!=null)if((d=d.elem)!=null)d.style.height=h;
d=this.buttons[1];
if(d!=null)if((d=d.elem)!=null)
{
try{h-=parseInt(this.Element.cellSpacing);}catch(e){}
d.style.height=Math.floor(h/2);
this.buttons[2].elem.style.height=Math.ceil(h/2);
}
}
}
if(v)this.focus();
}
this.getReadOnly=function(){return this.elem.readOnly;}
this.setReadOnly=function(v){this.elem.readOnly=v;}
this.getText=function(){return this.elem.value;}
this.setText=function(v){this.elemValue.value=this.elemViewState.value=this.text=v; this.repaint(); if(this.fix==1)this.old=this.instant(true);}
this.instant=function(){return this.getText();}
this.getValue=function(){return this.instant();}
this.setValue=function(v){this.setText(""+((v==null)?"":v));}
this.spinF=-1;
this.spin_=function(v)
{
if(this.fireEvent(15,null,v))return;
var t=this.elem.value;
this.spin(v);
if(this.elem.value==t && this.roll && this.min!=null && this.max!=null)
{
v=this.sel0;
this.setValue(this.limits(this.getValue(true),true));
this.select(v);
}
if(this.elem.value!=t)this.fireEvent(12,null);
}
this.spin=function(v){}
//
this.doKey=function(k,c,t,i,sel0,sel1)
{
if(sel0!=sel1){t=t.substring(0,sel0)+t.substring(sel1); sel1=sel0; i=t.length;}
//7-del,8-back
else if(k==7){if(sel1++>=i || i==0)return;}
else if(k==8){if(sel0--<1)return;}
if(k<9 || this.maxLength==0 || this.maxLength>i)
{
if(k>8 && sel1>=i)t+=c;
else t=t.substring(0,sel0)+c+t.substring(sel1);
}
else k=0;
//
this.elem.value=t;
this.select((k>10)?sel1+1:sel0);
}
this.doKey0=function(e,a)
{
var t0=this.text,t1=this.elem.value;
var k=e.keyCode;
if(k==0 || k==null)if((k=e.which)==null)return;
if(e.ctrlKey || e.altKey)
{
if(e.altKey)this.k0=-1;
else if(t0!=t1)this.paste(t1);
else if(k==17)this.getSelectedText();//paste
if(a==0 && (k==38 || k==40))this.doBut(e,a,0);
return;
}
if(this.fcs!=2)return;
if(a==0)this.k0=k;
if(a==2){if(this.k0>0)this.k0=0; this.spinF=-1;}
var i=t1.length,bad=this.bad;
if(k<=46)
{
switch(k)
{
case 8: case 46://back//del
if(this.k0==k && a==1)a=2;
if(a==0){a=1; if(k==46)k=7;}
break;
case 27://esc
ig_cancelEvent(e); return;
case 13://enter
if(this.hideEnter)ig_cancelEvent(e);
else{this.valid(this.enter0()); this.update();}
if(this.postEnter){ig_cancelEvent(e); this.doPost(2);}
return;
case 38: case 40://up//down
if(a==0 && this.spinOnArrows && !e.shiftKey)this.spin_((k==38)?this.spinDelta:-this.spinDelta);
if(this.k0==k)a=2;
break;
}
}
if(a==1 && k==this.k0 && ((k<48 && k>9 && k!=32)|| k>90))return;
if(!bad)
{
if(a!=0 && k!=9)ig_cancelEvent(e);
if(a==1 && this.k0==-1){this.k0=0; if(this.allowAlt)this.getSelectedText(); else return;}
if(a==0 || k<9)this.getSelectedText();
}
if(a==1 && k>6)
{
if(k>31)
{
if(this.fireEvent(1,e,k))
{
if(bad)ig_cancelEvent(e);
return;
}
if((a=this.Event)!=null)if((a=a.keyCode)!=null)k=a;
}
this.doKey(k,(k<10)?"":String.fromCharCode(k),t1,i,this.sel0,this.sel1,bad);
}
}
this.paste=function(v)
{
var m=this.maxLength;
if(m>0 && m<v.length)v=v.substring(0,m);
this.text="";
this.fix=0;
this.setText(v,this.sel0);//mask
this.fix=1;
this.fireEvent(12,null);
}
this.spin0=function(b,o)
{
var z=0;
if(o!=null){o.delay=o.spinDelay; ig_csom.edit_o=o; z++; o.spinF=-1; if(o.fcs<1 && o.spinFocus)o.focus();}
else
{
if((o=ig_csom.edit_o)==null)return;
b=o.buttons!=null && o.buttons[1].state==2;
if(o.spinSpeedUp>1){if(o.delay>o.spinDelay/o.spinSpeedUp)z=o.delay=Math.ceil(o.delay*6/7);}
if(o.spinSpeedUp<1){if(o.delay<o.spinDelay/o.spinSpeedUp)z=o.delay=Math.ceil(o.delay*7/6);}
}
o.spin_(b?o.spinDelta:-o.spinDelta);
if(z==0)return;
if(ig_csom.edit_f!=null)window.clearInterval(ig_csom.edit_f);
ig_csom.edit_f=window.setInterval(o.spin0,o.delay);
}
this.butState=function(b,s)
{
var e,i=-1,bb=this.buttons;
if(bb!=null)bb=bb[b];
if(bb==null || bb.state==s)return;
while(i++<3)
if(i!=b && (e=this.buttons[i])!=null)if(e.state==1 || e.state==2)
this.butState(i,0);
if(b>0 && (s==2 || bb.state==2))
{
if(ig_csom.edit_f!=null){window.clearInterval(ig_csom.edit_f); ig_csom.edit_f=null;}
if(s==2)this.spin0(b==1,this);
}
bb.state=s;
if(this.css>0)
{
if((i=s)>0)i=((this.css & (1 << (s-1)))==0)?0:s;
if(bb.elem.className!=(e=this.ID+i+this.ccss[s]))bb.elem.className=e;
}
if(ig_csom.isEmpty(i=bb.img[s]))if(ig_csom.isEmpty(i=bb.img[0]))return;
bb=bb.elem.childNodes;
for(s=0;s<bb.length;s++)
{
e=bb[s];
b=e.nodeName.toUpperCase();
if(b=="IMG")if(e.src!=i)e.src=i;
if(b=="TABLE")if(e.ig_color!=i)this.initButElem(e,ig_color=i);
}
}
this.doBut=function(e,a,but)
{
ig_cancelEvent(e);
if(!this.getEnabled()|| but>2)return;
if(but==0)
{
if(a<=3)
{
if(this.fireEvent(14,e))return;
if(this.Event.needPostBack || (this.postButton && !this.Event.cancelPostBack)){this.doPost(1); return;}
if(a<3)return;
}
}
else if(this.getReadOnly()&& !this.spinOnReadOnly)return;
if(a==4)this.butP=-1;
else if(a!=3 && e.button!=0 && this.butP<0)return;
var b=this.buttons[but].elem;
if(a==7)
{
//fix for inner elems
var z,x=0,y=0,w=b.offsetWidth,h=b.offsetHeight;
if(w!=null)
{
while(b!=null){x+=b.offsetLeft; y+=b.offsetTop; b=b.offsetParent;}
z=1;
if(e.clientX>x+z && e.clientY>y+z && e.clientX+z<x+w && e.clientY+z<y+h)
return;
}
if(this.butP==0)this.butP=-1;
}
b=this.butP;
if(a==3)
{
if(b>=0)this.butState(b,0);
this.butP=-2;
if(e.button<2)
{
this.butP=but;
this.butL=e.button;
this.butState(but,2);
}
return;
}
if(e.button==0 && b<-1)b=this.butP=-1;
if(b>=0 && a==5)if(e.button!=this.butL)
{
b=this.butP=-1;
this.butState(but,1);
return;
}
if(b<-1 || (b>=0 && b!=but))return;
this.butState(but,(a==7)?0:((b>=0)?2:1));
}
//enter-key
this.enter0=function(){return this.elem.value;}
//update post field and fire change event
this.update=function(post)
{
this.text=this.focusTxt(false,(this.fcs==2 || this.hadFocus)?"":null);//""-still focus
var v=this.instant(true);
if(v!=null && this.old!=null)if(v.getTime!=null && v.getTime()==this.old.getTime())
v=this.old;
if(v!=this.old)
{
if(this.fireEvent(11,null,this.old))
{
this.fix=0;
this.setValue(this.old);
this.fix=1;
this.text=this.focusTxt(false,null);
}
else
{
if(ig_csom.notEmpty(this.clr1))this.elem.style.color=(v!=null && v<0)?this.clr1:this.clr0;
this.old=v;
if(post && (this.Event.id!=11 || !this.Event.cancelPostBack))this.doPost(3);
}
}
}
//process events
this.doEvt=function(e)
{
var v=this.elemID,type=this.eventID(e.type);
//cut from mask
if(type==5 && this.fcs==2 && e.button==1)this.getSelectedText();
if(type!=1)if(this.fireEvent(type,e))if(type<8){ig_cancelEvent(e); return;}
if(v>=0){this.doBut(e,type,v); return;}
var val=this.elem.value;
if(type<3)this.doKey0(e,type);
else if(type>=8)
{
this.spinF=-1;
var foc=(type==8);
if(foc==(this.fcs>0))return;
v=(!this.getReadOnly()&& this.getEnabled())?2:1;
this.fcs=foc?v:0;
if(v==1)return;
this.hadFocus=!foc;
if(foc)
{
if(val!=this.text)// && this.k0<=0)
{this.getSelectedText(); this.paste(val);}
this.text=this.focusTxt(foc,e);
}
else this.update(this.postValue);
this.repaint();
this.select(this.selectionOnFocus*10000);
this.hadFocus=false;
return;
}
if(val!=this.text)
{
if(type>3 && this.k0==0){this.paste(val); return;}
this.text=val;
this.fireEvent(12,e);
}
}
//notify listeners and post
this.fireEvent=function(id,evnt,arg)
{
if(id==12)
{
if(this.lastText==(arg=this.elem.value))return false;
this.lastText=this.text=arg;
if(this.fcs<2)this.update();
}
var evt=this.Event;
if(evt==null)evt=this.Event=new ig_EventObject();
evt.id=id;
var i=evt.srcType=this.elemID;
evt.srcElement=(i<0)?this.elem:this.buttons[i].elem;
var evts=this.events[id];
i=(evts==null)?0:evts.length;
if(i==0)return false;
var cancel=false,once=true;
evt.keyCode=null;
if(arg==null)
{
if(id<3){arg=evnt.keyCode; if(arg==0 || arg==null)arg=evnt.which;}
else arg=this.elem.value;
}
while(i-->0)
{
if(evts[i]==null)continue;
if(once){evt.reset(); evt.event=evnt; once=false;}
evts[i].fRef(this,arg,evt,evts[i].o);
if(evt.cancel)cancel=true;
}
if(evt.needPostBack && id!=14)this.doPost(0);
return cancel;
}
// MS validators
this.valid=function(v)
{
var fire=this.elemValue.value!=v;
this.elemValue.value=v;
try
{
v=window.event;
// conditions to get around bugs in WebUIValidation.js plus 2 tricks
if(fire && this.fcs>=0 && v!=null && v.srcElement==this.elem)
{this.elem.Validators=this.elemValue.Validators; this.elemValue.onchange();}
}catch(e){}
}
this.select=function(sel0,sel1)
{
if(this.fcs!=2 || !this.getVisible())return;
var e=this.elem;
var i=e.value.length;
if(sel1==null){sel1=sel0; if(sel0==null || sel0<0){sel0=0; sel1=i;}}
if(sel1>=i)sel1=i;
else if(sel1<sel0)sel1=sel0;
if(sel0>sel1)sel0=sel1;
this.sel0=sel0; this.sel1=sel1;
if(e.selectionStart!=null)
{e.readOnly=true; e.selectionStart=sel0; e.selectionEnd=sel1; e.readOnly=false;}
if(this.tr==null)return;
sel1-=sel0;
this.tr.move("textedit",-1);
this.tr.move("character",sel0);
if(sel1>0)this.tr.moveEnd("character",sel1);
this.tr.select();
}
this.getSelectedText=function()
{
var r="";
this.sel0=this.sel1=0;
if(this.elem.selectionStart!=null)
{
if((this.sel0=this.elem.selectionStart)<(this.sel1=this.elem.selectionEnd))
r=this.elem.value.substring(this.sel0,this.sel1);
return r;
}
if(this.tr==null){this.bad=true; return r;}
var sel=document.selection.createRange();
r=sel.duplicate();
r.move("textedit",-1);
try{while(r.compareEndPoints("StartToStart",sel)<0)
{
if(this.sel0++>1000)break;
r.moveStart("character",1);
}}catch(ex){}
r=sel.text;
this.sel1=this.sel0+r.length;
return r;
}
this.getSelection=function(start){this.getSelectedText(); return start?this.sel0:this.sel1;}
this.doPost=function(type)
{
if(type!=0 && this.Event!=null && this.Event.cancelPostBack)return;
if(this.fcs==2)this.update();
else if(this.fcs==0)try{if(document.activeElement!=null)document.activeElement.fireEvent("onblur"); else window.blur();}catch(ex){}
try{__doPostBack(this.uniqueId,type);}catch(ex){}
}
this.focus=function(){try{this.elem.focus();}catch(e){}}
this.hasFocus=function(){this.fcs>0;}
}
function igedit_event(e)
{
if(e==null)if((e=window.event)==null)return;
var o=e.srcElement;
if(e.type=="submit")
{
for(var i in igedit_all)if((o=igedit_all[i])!=null)if(o.fcs==2)o.update();
return;
}
if(e.type=="unload")ig_dispose(igedit_all);
if(o==null)if((o=e.target)==null)o=this;
if((o=igedit_getById(null,o))!=null)if(o.doEvt!=null)o.doEvt(e);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -