Rev 20 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
20 | reyssat | 1 | /* |
2 | DynAPI Distribution |
||
13573 | obado | 3 | dynapi.functions.Image extension |
20 | reyssat | 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 | }; |
||
13573 | obado | 63 | f.setImageTTL = function(ms){ |
20 | reyssat | 64 | this._imgTTL=ms; |
65 | }; |
||
66 | |||
67 | |||
68 | dynapi._imageReload = function(){ |
||
69 | var t=this.src; |
||
70 | this.src=''; |
||
13573 | obado | 71 | this.src=t; |
20 | reyssat | 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; |
||
13573 | obado | 80 | if(p) { |
20 | reyssat | 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 |