Subversion Repositories wimsdev

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. /*
  2.         DynAPI Distribution
  3.         dynapi.functions.Image extension       
  4. */
  5.  
  6. var f = dynapi.functions;
  7. f.Image = {}; // used by dynapi.library
  8.  
  9. // Image Functions ---------------------------
  10.  
  11. f._imgTTL = 30000; // Image Time To Load (ms)
  12. f.getImage = function(src,w,h,params) {
  13.         var img,name,p=params;
  14.         if(!p) name=src;
  15.         else name=(!p.alias)? src:p.alias;
  16.         if(dynapi.ximages[name]) img = dynapi.ximages[name];
  17.         else {
  18.                 img=dynapi.ximages[name] = (w!=null&&h!=null)? new Image(w,h) : new Image();
  19.                 img.w=w||null;
  20.                 img.h=h||null;
  21.                 img.src=src;img.params=p;
  22.                 img.getHTML=dynapi._imageGetHTML;
  23.                 img.reload=dynapi._imageReload;
  24.                 img.dtStart=new Date();
  25.                 if(p) {
  26.                         var f=dynapi.functions;
  27.                         if(p.oversrc) f.getImage(p.oversrc);
  28.                         if(p.downsrc) f.getImage(p.downsrc);
  29.                 }
  30.                 if(!this._imgTmr && this._imgProgFn) this._imageProgress();
  31.         }
  32.         return img;
  33. };
  34. f.getFailedImages = function(){
  35.         var ar=[];
  36.         for(i in dynapi.ximages){
  37.                 img=dynapi.ximages[i];
  38.                 if(img && img.failed) ar[ar.length]=img;
  39.         }
  40.         return ar;
  41. };
  42. f.captureImageProgress=function(fn){ //fn = fn(completed,failed,total);
  43.         this._imgProgFn=fn;
  44.         this._imageProgress();
  45. };
  46. f._imageProgress = function(){
  47.         var i,c=0,f=0,t=0;
  48.         var img,dtEnd = new Date;
  49.         var fn=this._imgProgFn;
  50.         for(i in dynapi.ximages){
  51.                 img=dynapi.ximages[i];
  52.                 if(img && img.complete!=null){
  53.                         t++;
  54.                         img.failed=(!img.complete && (dtEnd-img.dtStart)>this._imgTTL)? true:false;
  55.                         if (img.complete) c++;
  56.                         else if(img.failed) f++;
  57.                 }
  58.         }
  59.         if(fn) fn(c,f,t);
  60.         if(c+f<t) this._imgTmr=window.setTimeout('dynapi.functions._imageProgress()',100);
  61.         else this._imgTmr=0;
  62. };
  63. f.setImageTTL = function(ms){
  64.         this._imgTTL=ms;
  65. };
  66.  
  67.  
  68. dynapi._imageReload = function(){
  69.         var t=this.src;
  70.         this.src='';
  71.         this.src=t;    
  72.         this.dtStart=new Date();
  73.         this.failed=false;
  74.         dynapi.functions._imageProgress();
  75. };
  76. dynapi._imageHookArray={};
  77. dynapi._imageHook=function(anc,id,img,act,iSrc){
  78.         var rt,f,tf,p=dynapi._imageHookArray[id];
  79.         if(iSrc) img.src=iSrc;
  80.         if(p) {                
  81.                 f=p['on'+((act!='click')?'mouse':'')+act];tf=typeof(f);
  82.                 if(f) rt=((tf=='string')? eval(f):f(act,anc,img,iSrc));
  83.                 if(!dynapi.ua.ns4) anc.blur();
  84.         }
  85.         return (!rt)?false:rt;
  86. };
  87. dynapi._imageGetHTML=function(params){
  88.         var c,i,t,text,dir,xtags='';
  89.         var p=(params)? params:{};
  90.         var lparams=(this.params)? this.params:{}; // opera can't do a for(i in object) on a null variable?
  91.         var forbid =',width,height,alias,src,tooltip,link,text,textdir,'
  92.         +'oversrc,downsrc,onclick,onmouseover,onmouseout,onmouseup,onmousedown,';
  93.         for(i in lparams) {if(p[i]==null) p[i]=lparams[i]};
  94.         if(!p.name) p.name='XImage'+dynapi.ximages['__xCnTer__']++;
  95.         if(p.border==null) p.border=0;
  96.         // setup width & height
  97.         if(this.width && this.w==null) this.w=this.width;
  98.         if(this.height && this.h==null) this.h=this.height;
  99.         text=p['text']; dir=p['textdir'];
  100.         t= '<img src="'+this.src+'"'
  101.         +((this.w)? ' width="'+this.w+'"':'')
  102.         +((this.h)? ' height="'+this.h+'"':'')
  103.         +((p['tooltip'])?' alt="'+p['tooltip']+'"':'');
  104.         c='return dynapi._imageHook(this,\''+p.name+'\','+((dynapi.ua.ns4)? '((this._dynobj)? this._dynobj.doc:document)':'document')+'.images[\'';
  105.         if(p.onclick) xtags=' onclick="'+c+p.name+'\'],\'click\');"';
  106.         if(p.onmouseover||p.oversrc) xtags+=' onmouseover="'+c+p.name+'\'],\'over\',\''+((p.oversrc)?p.oversrc:'')+'\');"';
  107.         if(p.onmouseout||p.oversrc) xtags+=' onmouseout="'+c+p.name+'\'],\'out\',\''+((p.oversrc)?this.src:'')+'\');"';
  108.         if(p.onmousedown||p.downsrc) xtags+=' onmousedown="'+c+p.name+'\'],\'down\',\''+((p.downsrc)?p.downsrc:'')+'\');"';
  109.         if(p.onmouseup||p.downsrc) xtags+=' onmouseup="'+c+p.name+'\'],\'up\',\''+((p.downsrc)?((p.oversrc)?p.oversrc:this.src):'')+'\');"';
  110.         if(!p.link && (p.onclick||p.oversrc||p.downsrc)) p.link='javascript:;';
  111.         if(!xtags && p.name.indexOf('XImage')==0) p.name=null; // remove name if not needed
  112.         for(i in p){if(forbid.indexOf(','+i+',')<0 && p[i]!=null) t+=' '+i+'="'+p[i]+'"'}      
  113.         t+=' />';
  114.         if (text){
  115.                 dir=(dir)?(dir+'').toUpperCase():'E';
  116.                 if (dir=='N') t=text+'<br>'+t;
  117.                 else if (dir=='S') t=t+'<br>'+text;
  118.                 else if (dir=='E') t=t+text;
  119.                 else if (dir=='W') t=text+t;
  120.         }
  121.         if(p.link) t='<a title="'+((p.tooltip)? p.tooltip:'')+'" href="'+p['link']+'"'+xtags+'>'+t+'</a>'
  122.         if(xtags && p.name) dynapi._imageHookArray[p.name]=p;
  123.         return t;
  124. };
  125.  
  126.