home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World 1999 October
/
PCWorld_1999-10_cd1.bin
/
delphi
/
INSTALL
/
DATA1.CAB
/
VCL_Source
/
Source
/
Webmidas
/
xmldisp.js
< prev
next >
Wrap
Text File
|
1999-08-11
|
13KB
|
527 lines
//Copyright Inprise Corporation 1999, all rights reserved, to be used with Borlands Midas-technology only,
//unless special permission has been given.
var xmldisp_vers="1.0";
var szNotUpdateable="disabled";
var iUpKey=38, iDownKey=40;
new xmlDisplay(null,null,null);
xmlDisplay.prototype.fldcnt=0;
xmlDisplay.prototype.rows=0;
xmlDisplay.prototype.bDontPost=0;
xmlDisplay.prototype.scrolloffs=0;
xmlDisplay.prototype.page=0;
xmlDisplay.prototype.fldfirst=0;
xmlDisplay.prototype.KeyMap=null;
xmlDisplay.prototype.focusflag=0;
//methods
xmlDisplay.prototype.getFldDes=function(i){return this.src.Fields.Field[this.names[i]];}
xmlDisplay.prototype.selectRow=function(r){var pos=this.page*this.rows+r+this.scrolloffs;return this.src.setPos(pos);}
xmlDisplay.prototype.getValue=GridGetValue;
xmlDisplay.prototype.putValue=GridPutValue;
xmlDisplay.prototype.getRow=GridGetRow;
xmlDisplay.prototype.valchanged=GridValChanged;
xmlDisplay.prototype.setFocus=GridSetFocus;
xmlDisplay.prototype.xvalidate=GridValidate;
xmlDisplay.prototype.scroll=GridScroll;
xmlDisplay.prototype.refr=GridRefr;
//public
xmlDisplay.prototype.post=GridPost;
xmlDisplay.prototype.postall=function(){if (this.src.forcepost()) return;this.post();}
xmlDisplay.prototype.removeRow=GridDelete;
xmlDisplay.prototype.newRow=GridNew;
xmlDisplay.prototype.undo=GridUndo;
xmlDisplay.prototype.first=GridFirst;
xmlDisplay.prototype.last=GridLast;
xmlDisplay.prototype.pgup=pgBackw;
xmlDisplay.prototype.pgdown=pgForw;
xmlDisplay.prototype.up=GridUp;//pre-rec
xmlDisplay.prototype.down=GridDown;//next-rec
xmlDisplay.prototype.left=GridL;//prev-field
xmlDisplay.prototype.right=GridR;//next-field
xmlDisplay.prototype.sort=function(n){if(this.src.forcepost())return;var i;for(i=0;i<this.fldcnt;i++){if (this.names[i]==n){this.fCol=i;break;}}this.src.sort(n);this.first();}
xmlDisplay.prototype.xfocus=GridFocus;
xmlDisplay.prototype.keys=GridKeys;
xmlDisplay.prototype.setKeyMap=GridSetKeys;
xmlDisplay.prototype.OnError=function(s){alert(s);return null;}
var fset=0;
function xmlDisplay(src,fldids,names,rstate)
{
this.src=src;
this.fldids=fldids;
this.names=names;
this.rstate=rstate;
if(src==null||src.doc=="") return null;
src.regobj(this);
if(fldids){this.fldcnt=fldids.length}else{if(names){this.fldcnt=names.length}else{this.fldcnt=this.src.FieldCnt}};
this.rows=0;
var i;
for(i=0;i<this.fldcnt;i++)
{
var ref=fldids[i];
var t=ref.type;if(t==null)t=ref[0].type;
if(t=="text"||t=="textarea")
{
var l=ref.length;
if(isNaN(l)) l=1;
if(this.rows==0) this.rows=l;
if(l!=this.rows){this.OnError(names[i]+": inconsistent row-count");if(l<this.rows) this.rows=l;}
}
var f=this.getFldDes(i);
if(f==null) return this.OnError(names[i]+": name not found in rowset");
if(this.rows!=0){
if(this.rows==1)
{
if(ref.setAttribute)
{
if(f.readonly==1) ref.setAttribute(szNotUpdateable,1);
if(f.maxlength>0&&f.Type!=szUni) ref.setAttribute("maxLength",f.maxlength);
}
}
else
{
var j;
for(j=0;j<ref.length;j++)
{
if(ref[j].setAttribute)
{
if(f.readonly==1) ref[j].setAttribute(szNotUpdateable,1);
if(f.maxlength>0) ref[j].setAttribute("maxLength",f.maxlength);
}
}
}
}
if(f.readonly==1&&i==this.fldfirst) this.fldfirst++;
}
this.fRow=0;
this.fCol=0;
//Init
this.selectRow(0);
this.refr(1);
if(fset==0&&this.src.parent==null){this.setFocus(0,this.fldfirst);fset++;}
//this.keys=GridKeys;
if(this.rows==1)
{
this.setKeyMap(iUpKey,"left");
this.setKeyMap(iDownKey,"right");
}
else
{
this.setKeyMap(iUpKey,"up");
this.setKeyMap(iDownKey,"down");
}
this.setKeyMap(33,"pgup");
this.setKeyMap(34,"pgdown");
this.setKeyMap(45,"newRow");
this.setKeyMap(13,"right");
return this;
}
function GridKeys(el)
{
var e,k;
e=self.event;
if(!e) return true;
if(e!=null){k=e.keyCode;}else{k=e.which;}
var found=false;
var r,c;
for(c=0;c<this.fldcnt;c++)
{
var ref=this.fldids[c];
if(this.rows==1){if (ref==el) found= true;}
else
{
for(r=0; r<this.rows;r++)
{if(ref[r]==el){found=true; break;}}
}
if(found) break;
}
if(!found) return true;
if(this.KeyMap==null) return true;
var a=this.KeyMap[k.toString()];
if(a==null||this[a]==null){return true;}
a="this."+a+"();";
eval(a);
return true;
}
function GridL()
{
var r=this.fRow,c=this.fCol;
do{if(c>0)c--;else c=this.fldcnt-1;}
while(this.getFldDes(c).readonly==1&&c!=this.fCol)
this.setFocus(r,c);
}
function GridR()
{
var r=this.fRow,c=this.fCol;
do{if(c< this.fldcnt-1)c++;else c=0;}
while(this.getFldDes(c).readonly==1&&c!=this.fCol)
this.setFocus(r,c);
}
function GridDown()
{
var r=this.fRow, c=this.fCol;
if(this.rows==1){this.pgdown();return;}
if(r<this.rows-1){r++;}else{this.scroll(1);return;}
this.setFocus(r,c);
}
function GridUp()
{
var r=this.fRow,c=this.fCol;
if(this.rows==1){this.pgup();return;}
if(r>0) r--;else{this.scroll(-1);return;}
this.setFocus(r,c);
}
function pgBackw()
{
if(this.page>0||this.scrolloffs)
{
if(this.src.forcepost()) return;
if(this.page) this.page--;else{this.fRow+=this.scrolloffs-this.rows;this.scrolloffs=0}
if(this.scrolloffs<0&&this.page==0){this.scrolloffs=0;this.fRow=0;}
if(this.rows==1) this.selectRow(0);
else this.refr(1);
}
else this.fRow=0;
this.setFocus(this.fRow, this.fCol);
}
function pgForw()
{
if(this.rows*(this.page+2)<this.src.RowCnt)
{
if(this.src.forcepost()) return;
this.page++;
if(this.rows==1) this.selectRow(0);else this.refr(1);
}
else{this.last();return;}
this.setFocus(this.fRow,this.fCol);
}
function GridScroll(inc)
{
if(inc>0)
{
if(this.page*this.rows+this.fRow+this.scrolloffs>=this.src.RowCnt) return;
if(this.scrolloffs==this.rows-1){this.scrolloffs=0;this.page++;}
else this.scrolloffs++;
}
else
{
if(-this.scrolloffs==this.rows-1){if(this.page>0){this.scrolloffs=0;this.page--;}}
else{this.scrolloffs--;if(this.page*this.rows+this.scrolloffs<0)this.scrolloffs=0}
}
var r=this.fRow;
this.selectRow(r);
this.refr(1);
this.setFocus(r,this.fCol);
}
function GridSetFocus(r,c)
{
if(c>=this.fldcnt||r>=this.rows) return;
var ref=this.fldids[c];
if(this.rows>1) ref=ref[r];
if(ref.disabled||ref.readonly) return;
if(ref.focus!=null){this.focusflag=1;ref.focus();if(this.focusflag==1)this.xfocus(r,c);}
}
function GridFocus(r,c)
{
var ref;
this.focusflag=0;
if(c==null)
{
if(r==null){r=this.fRow;c=this.fCol;ref=this.fldids[c];}
else
{
var i,j,ref,found=0;
for(j=0;j<this.fldcnt;j++)
{
ref=this.fldids[j];
if(this.rows==1){if(ref==r){r=0;c=j;found=1;break;}}
else for(i=0;i<this.rows;i++) if(ref[i]==r){r=i;c=j;found=1;break;}
if(found) break;
}
if(found==0)return;
}
}
else ref=this.fldids[c];
if(this.rows>1) ref=ref[r];
var f=this.getFldDes(c);
var p=this.page*this.rows+this.scrolloffs;
if(f&&f.readonly==1)
{
if(ref.getAttribute&&ref.getAttribute("disabled")==true){}//explorer only
else ref.blur();
return;
}
else
{
if(r!=this.fRow&&this.bDontPost==0)
{if(this.src.noIns!=0&&(p+r)>=this.src.RowCnt){ref.blur();return;}
if(this.src.forcepost()!=0)return;
}
if(c!=this.fCol){if(this.src.noUpd!=0&&p+this.fRow<this.src.RowCnt&&this.valchanged(p,this.fRow,this.fCol)!=0){this.refr(1);}
else if(this.valchanged(p,this.fRow,this.fCol)!=0&&this.xvalidate(this.fRow,this.fCol,0)==0)return;}
this.fRow=r;
this.fCol=c;
if(this.rows>1) this.selectRow(r);
if(ref.select!=null) ref.select();
this.bDontPost=0;
}
}
function GridUndo()
{
var r=this.fRow;
if(r==-1) return;
var pos=this.page*this.rows+r+this.scrolloffs;
if(pos>=0&&pos<this.src.RowCnt)
{
this.src.undo(pos);
if(pos&&pos>=this.src.RowCnt) this.last();
else this.setFocus(r,this.fCol);
}
if(pos>=this.src.RowCnt){this.refr(1);this.last();}
}
function GridNew()
{
if(this.src.noIns) return;
if(this.src.forcepost()) return;
var pages=0,r=this.src.RowCnt%this.rows;
pages=(this.src.RowCnt-r)/this.rows;
if(r==0&&pages)
{
if(this.rows==1) pages++;
else this.scrolloffs=1;
r=this.rows-1;
this.page=pages-1;
}
else{this.scrolloffs=0;this.page=pages;}
this.refr(1);
this.setFocus(r,this.fldfirst);
}
function GridFirst()
{
if(this.src.forcepost()) return;
this.scrolloffs=0;
this.page=0;
if(this.rows==1) this.selectRow(0);else{if(this.src.pos!=0)this.refr(1);}
this.setFocus(0,this.fCol);
}
function GridLast()
{
if(this.src.forcepost()) return;
var r=this.src.RowCnt%this.rows ;
pages=(this.src.RowCnt-r)/this.rows;
if(r==0){r=this.rows-1;this.page=pages-1;this.scrolloffs=0;}
else{this.scrolloffs=0;this.page=pages;r--;}
if(this.rows==1) this.selectRow(0);
else this.refr(1);
this.setFocus(r,this.fCol);
}
function GridValChanged(pos,r,c)
{
var f=this.getFldDes(c);
var val="";
if(pos+r<this.src.RowCnt)
{if(f){val=f.Value(pos+r);if(val) val=f.todisp(val);}}
else
{
if(this.getValue(c,r)!="")return 1;
return 0;
}
var gval=this.getValue(c,r);
if(val==gval) return 0;
if(f&&(f.Type=="string"||f.Type==szUni||f.subtype=="Text"))
if(txtnorm(val)==txtnorm(gval)) return 0;
if(f&&f.readonly==1){this.OnError(f.name+" : Cannot change readonly field");return 0;}
return 1;
}
function txtnorm(s){var v=new Array();v=s.split("\r\n");s=v.join(" ");v=s.split("\n");s=v.join(" ");v=s.split("\r");s=v.join(" ");return s;}
function GridValidate(r,c,q)
{
if(this.bDontPost) return 0;
var ref;
if(c==null)
{
var i,j,ref,found=0;
for(j=0;j<this.fldcnt;j++)
{
ref=this.fldids[j];
if(this.rows==1){if (ref==r) {r=0;c=j;found=1;break;}}
else for(i=0;i<this.rows;i++) if(ref[i]==r){r=i;c=j;found=1;break;}
if(found) break;
}
if(found==0) return 1;
}
var v=this.getValue(c,r);
var f=this.getFldDes(c);
var res="";
if(f){if(f.required!=0&&v==""&&q==0)res=v;else res=f.validate(v);}
if(res!=null){v=res;this.putValue(c,r,v);return 1;}
this.setFocus(r,c);
return 0;
}
function GridGetRow(row)
{
var i,f,v,r=new Array();
for(i=0;i<this.fldcnt;i++)
{
v=this.getValue(i,row);
f=this.getFldDes(i);
if(f) r[this.names[i]]=f.frdisp(v);
}
return r;
}
function GridPutValue(col,row,val)
{
var ref=this.fldids[col];
if(this.rows==1)
{
if(ref.type=="select-one"){var le=ref.length,i;for(i=0;i<le;i++)if(ref[i].value==val)ref[i].selected=true;else ref[i].selected=false;}else
if(ref.type=="text"||ref.type=="textarea"||ref.type=="select-one") ref.value=val;
else
if(ref[0].type=="radio")
{
var i;
for(i=0;i<ref.length;i++)
{
if(ref[i].value==val){ref[i].checked=true; break;}
else ref[i].checked=false;
}
}
}
else ref[row].value = val;
}
function GridGetValue(col,row)
{
var ref=this.fldids[col];
if(this.rows==1)
{
if(ref.type=="select-one"){var le=ref.length,i;for(i=0;i<le;i++)if(ref[i].selected)return ref[i].value;return ""}
if(ref.type=="text"||ref.type=="textarea") return ref.value;
if(ref[0].type=="radio")
{
var i;
for(i=0;i<ref.length;i++)
{if(ref[i].checked==true) return ref[i].value;}
}
return "";
}
return ref[row].value;
}
function GridDelete()
{
if(this.src.noDel) return;
if(this.src.forcepost()) return;
var r=this.fRow;
if(r==-1) return;
var pos=this.page*this.rows+r+this.scrolloffs;
if(pos>=0&&pos<this.src.RowCnt)
{
this.src.deletex(pos);
if(pos&&pos>=this.src.RowCnt) this.last();
else this.setFocus(r,this.fldfirst);
}
}
function GridRefr(r)
{
if(r==0&&this.rows>1) return;
var i,j, pos;
if(r==2){this.scrolloffs=0;this.fRow=0;this.page=0}
if(this.rows==1) {if (this.page<this.src.RowCnt){pos=this.src.pos;this.page=pos;}else pos=this.page}
else pos=this.page*this.rows+this.scrolloffs;
if(pos<0) pos=0;
for(i=0;i<this.rows;i++)
{
for(j=0;j<this.fldcnt;j++)
{
var val="";
if(pos<this.src.RowCnt)
{
var f=this.getFldDes(j);
if(f){val=f.Value(pos);if(val)val=f.todisp(val);}
}
this.putValue(j,i,val);
}
if(this.rstate)
{
var st=this.src.RowState(pos);
if(this.rows==1) this.rstate.value=st;else this.rstate[i].value=st;
}
pos++;
}
}
function GridPost()
{
if(this.bDontPost) return 1;
var src=this.src;
var j,r=this.fRow,pos=this.page*this.rows+this.scrolloffs;
var bMod=0,err=0,bIns=(pos+r>=src.RowCnt)?1:0;
var row=null;
for(j=0;j<this.fldcnt;j++)
{
if(this.valchanged(pos,r,j))
{
if((bIns==0&&src.noUpd!=0)||(bIns!=0&&src.noIns)){this.refr(1);return 0;}
f=this.getFldDes(j);
if(f&&f.readonly!=0)continue;
bMod=1;
if(this.xvalidate(r,j,1)==0) return 1;
if(row==null)row=new Array();
var f,v;
v=this.getValue(j,r);
if(f)row[this.names[j]]=f.frdisp(v);
}
}
if(bMod)
{
if(bIns)
{
for(j=0;j<this.fldcnt;j++) if(this.xvalidate(r,j,1)==0) return 1;
}
if(bIns==0){err=src.modify(pos+r,row);}else{err=src.insert(row,1);}
}
return err;
}
function GridSetKeys(key,action,param)
{
if(this.KeyMap==null) this.KeyMap=new Array();
this.KeyMap[key.toString()]=action;
}