Subversion Repositories wimsdev

Rev

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