Update of /cvsroot/dynapi/dynapi2x/src/dynapi/api
In directory usw-pr-cvs1:/tmp/cvs-serv15575/src/dynapi/api

Added Files:
        dyndocument.js dynlayer.js event.js mouse.js 
Log Message:
Initial Import == 2.9

--- NEW FILE ---
/*
        DynAPI Distribution
        DynDocument Class

        The DynAPI Distribution is distributed under the terms of the GNU LGPL license.
        
        requires: dynapi.api.DynElement
*/

function DynDocument(frame) {
        this.inherit('DynElement');
        this.frame = frame;
        this.doc = this.frame.document;
        if (this.frame==dynapi.frame) this.all = DynObject.all;  // need it?
        this._dyndoc = this; // need it?
        this.x = 0;
        this.y = 0;
        this.w = 0;
        this.h = 0;
        this._topZIndex = 10000;
        var o = this;
        this.frame.onresize = function() {o._handleResize()};
        this.onResizeNS4 = "reload" // or "redraw"
        this.fgColor = this.doc.fgColor||'';
        this.bgColor = this.doc.bgColor||'';
        this._created = false;
};
var p = dynapi.setPrototype('DynDocument','DynElement');

p.getBgColor = function() {
        return this.bgColor;
};
p._remove = function() {
        this.elm=null;
        this.doc=null;
        this.frame=null;
};
p.getX = p.getY = p.getPageX = p.getPageY = function() {return 0};
p.getWidth = function() {
        if (!this.w) this.findDimensions();
        return this.w;
};
p.getHeight = function() {
        if (!this.h) this.findDimensions();
        return this.h;
};
p.findDimensions = function() {
        this.w=(dynapi.ua.ns||dynapi.ua.opera)? this.frame.innerWidth : 
this.elm.clientWidth;
        this.h=(dynapi.ua.ns||dynapi.ua.opera)? this.frame.innerHeight : 
this.elm.clientHeight;
};
p.setBgColor = function(color) {
        if (color == null) color='';
        if (dynapi.ua.ns4 && color == '') color = '#ffffff';
        this.bgColor = color;
        this.doc.bgColor = color;
};
p.setFgColor = function(color) {
        if (color == null) color='';
        if (dynapi.ua.ns4 && color == '') color='#ffffff';
        this.fgColor = color;
        this.doc.fgColor = color;
};
p.insertChild = function(c) {
        if (c.parent == this) {
                DynElement._flagEvent(c,'precreate');
                this.doc.write(c.getOuterHTML());
                c._inserted = true;
        }
};
p.insertAllChildren = function() {
        var str = '';
        var c;
        for (var i=0;i<this.children.length;i++) {
                c = this.children[i];
                DynElement._flagEvent(c,'precreate');
                str += c.getOuterHTML();
                c._inserted = true;
        }
        this.doc.write(str);
        this.doc.close();
};
p._create = function() {
        this._created = true;
        if (dynapi.ua.ns4) {
                this.css = this.doc;
                this.elm = this.doc;
        }
        else {
                this.elm = this.frame.document.body;
                this.css = this.frame.document.body.style;
                if (dynapi.ua.ie) {
                        this._overflow = this.css.overflow || '';
                        if (this._cursor) this.css.cursor = this._cursor;
                }
        }
        this.elm.lyrobj = this;
        this.findDimensions();
        for (var i=0;i<this.children.length;i++) {
                if (this.children[i]._inserted) {
                        DynLayer._assignElement(this.children[i]);
                        DynElement._flagEvent(this.children[i],'create');
                }
                else this.children[i]._create();
        }
        this._updateAnchors();  
        if (this.assignMouseEvents) this.assignMouseEvents();
        this.invokeEvent('load');
};
p._destroy = function() {
        for (var i=0;i<this.children.length;i++) {
                this.children[i]._destroy();
                delete this.children[i];
        }
        delete DynObject.all;
        this.elm = null;
        this.css = null;
        this.frame = null;
};

p._handleResize = function() {
        var w = this.w;
        var h = this.h;
        this.findDimensions();
        if (this.w!=w || this.h!=h) {
                if (dynapi.ua.ns4) {
                        if (this.onResizeNS4=="redraw") {
                                for (var i=0;i<this.children.length;i++) {
                                        this.children[i].elm = null;
                                        if (this.children[i]._created) {
                                                this.children[i]._created = false;
                                                this.children[i]._create();
                                        }
                                }
                                this.invokeEvent('resize');
                        }
                        else if (this.onResizeNS4=="reload") {
                                this.doc.location.href = this.doc.location.href;
                        }
                }
                else this.invokeEvent('resize');
        }
};
p.setCursor = function(c) {
        if (!c) c = 'default';
        if (dynapi.ua.ie && this._cursor!=c) {
                this._cursor = c;
                if (this.css) this.css.cursor = c;
        }
};

function main() {
        if (dynapi.document==null) {
                dynapi.document = new DynDocument(dynapi.frame);
                if (dynapi.loaded) dynapi.document._create();
                else dynapi.onLoad(function() {
                        dynapi.document._create();
                });
        }
};
if (!dynapi.loaded) main();
--- NEW FILE ---
/*
        DynAPI Distribution
        DynLayer Class

        The DynAPI Distribution is distributed under the terms of the GNU LGPL license.
        
        requires: dynapi.api.DynDocument
*/

// to-do: split this file into ns4/ie4 versions, correct dynapi.library definitions to 
reflect

function DynLayer() {
        this.inherit('DynElement');
        var a = arguments;
        if (a[0]) this.setHTML(a[0]);
        else this.html = null;
        this.x = a[1];
        this.y = a[2];
        this.w = a[3];
        this.h = a[4];
        this.bgColor = a[5];
        this.visible = true;
        this.z = 1;
        this.elm = null;
        this.doc = null;
        this.css = null;
        this._saveAnchor = false;
        this._layout = null;
};
var p = dynapi.setPrototype('DynLayer','DynElement');

p._destroy = function() {
        for (var i=0;i<this.children.length;i++) {
                this.children[i]._destroy();
        }
        this.children = null;
        this.frame = null;
        this.bgImage = null;
        this.bgColor = null;
        this.html = null;
        this.x = null;
        this.y = null;
        this.w = null;
        this.h = null;
        this.z = null;
        if (this.elm) {
                this.elm.lyrobj = null;
                this.elm = null;
        }
        this.doc = null;
        this.css = null;
        this.parent = null;
};

p._remove = function() {
        if (dynapi.ua.def && this.elm) {
                this.elm.style.visibility = "hidden";
                this.elm.innerHTML = "";
                this.elm.outerHTML = "";
        }
        else if (dynapi.ua.ns4 && this.elm) {
                if (!this.parent.doc.recycled) this.parent.doc.recycled=[];
                this.parent.doc.recycled[this.parent.doc.recycled.length]=this.elm;
                this.elm.visibility="hide";
        }
        this.frame = null;
        this.bgImage = null;
        this.bgColor = null;
        this.html = null;
        this.z = null;
        this.w = null;
        this.h = null;
        this.elm = null;
        this.doc = null;
        this.css = null;
};

if (dynapi.ua.ns4) {
        p._create = function() {
                if (this.parent && !this.elm) {
                        DynElement._flagEvent(this,'precreate');
                        var parentElement = this.parent.isClass('DynLayer')? 
this.parent.elm : this.parent.frame;
                        var elm = new Layer(this.w||0, parentElement);
                        if (this.w) elm.clip.width = this.w;
                        if (this.h) elm.clip.height = this.h;
                        if (this.x && this.y) elm.moveTo(this.x,this.y);
                        else if (this.x) elm.left = this.x;
                        else if (this.y) elm.top = this.y;
                        if (this.children.length || (this.html!=null && 
this.html!='')) {
                                elm.document.write(this.getInnerHTML());
                                elm.document.close();
                        }
                        if (this.bgColor!=null) elm.document.bgColor = this.bgColor;
                        if (this.clip) {
                                var c = elm.clip, cl = this.clip;
                                c.top=cl[0], c.right=cl[1], c.bottom=cl[2], 
c.left=cl[3];
                        }
                        if (this.z) elm.zIndex = this.z;
                        elm.visibility = this.visible? "inherit" : "hide";
                                DynLayer._assignElement(this,elm);
                        DynElement._flagEvent(this,'create');
                }
        };
        DynLayer._assignElement = function(dlyr,elm) {
                if (!elm) elm = dlyr.parent.doc.layers[dlyr.id];
                dlyr.elm = elm;
                dlyr.css = elm;
                dlyr.doc = elm.document;
                dlyr.doc.lyrobj = dlyr;
                dlyr.elm.lyrobj = dlyr;
                dlyr._dyndoc = dlyr.parent._dyndoc;
                for (var i=0;i<dlyr.doc.images.length;i++) 
dlyr.doc.images[i].lyrobj=dlyr;
                if (dlyr.html!=null && dlyr.html!='' && (dlyr.w==null || 
dlyr.h==null)) {
                        var cw = (dlyr.w==null)? dlyr.getContentWidth() : null;
                        var ch = (dlyr.h==null)? dlyr.getContentHeight() : null;
                        dlyr.setSize(cw,ch);
                }
                if (dlyr.bgImage!=null) dlyr.setBgImage(dlyr.bgImage);
                if (dlyr.assignMouseEvents) dlyr.assignMouseEvents();
                for (var i=0; i<dlyr.children.length; i++) {
                        DynLayer._assignElement(dlyr.children[i]);
                }
        };
        p.getOuterHTML=function() {
                var s='\n<layer id="'+this.id+'"';
                if (this.visible==false) s+=' visibility="hide"';
                s+=' left='+(this.x!=null? this.x : 0);
                s+=' top='+(this.y!=null? this.y : 0);
                if (this.w!=null) s+=' width='+this.w;
                if (this.h!=null) s+=' height='+this.h;
                if (this.clip) s+=' 
clip="'+this.clip[3]+','+this.clip[0]+','+this.clip[1]+','+this.clip[2]+'"';
                else s+=' 
clip="0,0,'+((this.w>=0)?this.w:0)+','+((this.h>=0)?this.h:0)+'"';
                if (this.z) s+=' z-index='+this.z;
                if (this.bgColor!=null) s+=' bgcolor="'+this.bgColor+'"';
                s+='>';
                s += this.getInnerHTML();
                s+='</layer>';
                return s;
        };
        p.setLocation = function(x,y) {
                var cx = (x!=null && x!=this.x);
                var cy = (y!=null && y!=this.y);
                if (cx) this.x = x||0;
                if (cy) this.y = y||0;
                if (this.css!=null) {
                        if (cx && cy) this.elm.moveTo(this.x, this.y);
                        else if (cx) this.css.left = this.x;
                        else if (cy) this.css.top = this.y;
                }
                return (cx||cy);
        };
        p.setPageLocation = function(x,y) {
                if (this.css) {
                        if (x!=null) {
                                this.css.pageX = x;
                                this.x = this.css.left;
                        }
                        if (y!=null) {
                                this.css.pageY = y;
                                this.y = this.css.top;
                        }
                        return true;
                }
                else {
                        if (this.isChild) {
                                if (x!=null) x = x - this.parent.getPageX();
                                if (y!=null) y = y - this.parent.getPageY();
                        }
                        return this.setLocation(x,y);
                }
        };
        p.getPageX = function() {return this.css? this.css.pageX : null};
        p.getPageY = function() {return this.css? this.css.pageY : null};
        p.setVisible = function(b) {
                if (b!=this.visible) {
                        this.visible = b;
                        if (this.css) this.css.visibility = b? "inherit" : "hide";
                }
        };
        p.setSize = function(w,h) {
                var cw = (w!=null && w!=this.w);
                var ch = (h!=null && h!=this.h);
                if (cw) this.w = w<0? 0 : w;
                if (ch) this.h = h<0? 0 : h;
                if (cw||ch) {
                        if (this._childAnchors) this._updateAnchors();
                        if (this._layout) this._layout._fixLayout();
                        if (this.css) {
                                if (cw) this.css.clip.width = this.w;
                                if (ch) this.css.clip.height = this.h;
                        }
                }
                return (cw||ch);
        };
        p.setHTML=function(html) {
                var ch = (html!=null && html!=this.html);
                if (ch) {
                        this.html = html;
                        if (this.css) {
                                if (dynapi.ua.platform=="mac") this.html+='\n';
                                var 
sTmp=(this.w==null)?'<NOBR>'+this.html+'</NOBR>':this.html;
                                this.doc.open();
                                this.doc.write(sTmp);
                                this.doc.close();
                                for (var i=0;i<this.doc.images.length;i++) 
this.doc.images[i].lyrobj=this;
                                for (i=0;i<this.doc.links.length;i++) 
this.doc.links[i].lyrobj=this;
                        }
                }
        };
}
else {
        p._create = function() {
                if (this.parent && !this.elm) {
                        DynElement._flagEvent(this,'precreate');
                        var elm, parentElement;
                        if (dynapi.ua.ns6) {
                                parentElement = this.parent.elm;
                                var r = parentElement.ownerDocument.createRange();
                                r.setStartBefore(parentElement);
                                var ptxt = 
r.createContextualFragment(this.getOuterHTML());
                                parentElement.appendChild(ptxt);
                                elm = parentElement.lastChild;
                        } else if (dynapi.ua.ie) {              
                                parentElement = this.parent.elm;
                                
parentElement.insertAdjacentHTML("beforeEnd",this.getOuterHTML());
                                elm = 
parentElement.children[parentElement.children.length-1];
                        }
                        DynLayer._assignElement(this,elm);
                        DynElement._flagEvent(this,'create');
                }
        };
        DynLayer._assignElement = function(dlyr,elm) {
                if (!elm) elm = dynapi.ua.ns6? dlyr.parent.doc.getElementById(dlyr.id) 
: dlyr.parent.elm.all[dlyr.id];
                dlyr.elm = elm;
                dlyr.css = elm.style;
                dlyr.doc = dlyr.parent.doc;
                dlyr.elm.lyrobj = dlyr;
                dlyr._dyndoc = dlyr.parent._dyndoc;
                if (dynapi.ua.ie && elm.all.tags("img").length) elm.ondragstart = 
dynapi.functions.False;
                if (dlyr.z && dynapi.ua.ns6) dlyr.css.zIndex = dlyr.z;
                if (dlyr.assignMouseEvents) dlyr.assignMouseEvents();
                for (var i=0; i<dlyr.children.length; i++) {
                        DynLayer._assignElement(dlyr.children[i]);
                }
                if (dlyr.html!=null && dlyr.html!='' && (dlyr.w==null || 
dlyr.h==null)) {
                        var cw = (dlyr.w==null)? dlyr.getContentWidth() : null;
                        var ch = (dlyr.h==null)? dlyr.getContentHeight() : null;
                        dlyr.setSize(cw,ch);
                }
        };
        p.getOuterHTML=function() {
                var s='<div id="'+this.id+'" style="';
                if (this.visible==false) s+=' visibility:hidden;';
                s+=' left:'+(this.x!=null? this.x : 0)+'px;';
                s+=' top:'+(this.y!=null? this.y : 0)+'px;';
                if (this.w!=null) s+=' width:'+this.w+'px;';
                if (this.h!=null) s+=' height:'+this.h+'px;';
                if (this.clip) s+=' clip:rect('+this.clip[0]+'px '+this.clip[1]+'px 
'+this.clip[2]+'px '+this.clip[3]+'px);';
                else if (this.w!=null && this.h!=null) s+=' clip:rect(0px '+this.w+'px 
'+this.h+'px 0px);';
                if (this.z) s+=' z-index='+this.z+';';
                if (this.bgImage!=null) s+=' background-image:url('+this.bgImage+');';
                if (this.bgColor!=null) s+=' background-color:'+this.bgColor+';';
                if (dynapi.ua.ie55 && this.bgImage==null && this.html==null) s+=' 
background-image:url(javascript:null);';
                if (this._cursor!=null) s+=' cursor:'+this._cursor+';';
                s+=' position:absolute;">';
                s += this.getInnerHTML();
                s+='</div>';
                return s;
        };
        p.setLocation=function(x,y) {
                var cx = (x!=null && x!=this.x);
                var cy = (y!=null && y!=this.y);
                if (cx) this.x = x||0;
                if (cy) this.y = y||0;
                if (this.css!=null) {
                        if (dynapi.ua.ie && dynapi.ua.v>=5) {
                                if (cx) this.css.pixelLeft = this.x;
                                if (cy) this.css.pixelTop = this.y;
                        }
                        else {
                                if (cx) this.css.left = this.x+"px";
                                if (cy) this.css.top = this.y+"px";
                        }
                }
                return (cx||cy);
        };
        p.setPageLocation = function(x,y) {
                if (this.isChild) {
                        if (x!=null) x = x - this.parent.getPageX();
                        if (y!=null) y = y - this.parent.getPageY();
                }
                return this.setLocation(x,y);
        };
        p.getPageX=function() {return (this.isChild)? 
this.parent.getPageX()+(this.x||0) : this.x||0};
        p.getPageY=function() {return (this.isChild)? 
this.parent.getPageY()+(this.y||0) : this.y||0};
        p.setVisible=function(b) {
                if (b!=this.visible) {
                        this.visible = b;
                        if (this.css) this.css.visibility = b? "inherit" : "hidden";
                }
        };
        p.setSize = function(w,h) {
                var cw = (w!=null && w!=this.w);
                var ch = (h!=null && h!=this.h);
                if (cw) this.w = w<0? 0 : w;
                if (ch) this.h = h<0? 0 : h;
                if (cw||ch) {
                        if (this._childAnchors) this._updateAnchors();
                        if (this._layout) this._layout._fixLayout();
                        if (this.css) {
                                if (cw) this.css.width = this.w||0;
                                if (ch) this.css.height = this.h||0;
                                if (cw || ch) this.css.clip = 'rect(0px 
'+(this.w||0)+'px '+(this.h||0)+'px 0px)';
                        }
                }
                return (cw||ch);
        };
        if (dynapi.ua.ie) {
                p.setHTML = function(html) {
                        var ch = (html!=null && html!='' && html!=this.html);
                        if (ch) {
                                this.html = html;
                                if (this.css) {
                                        this.elm.innerHTML = html;
                                }
                        }
                };
        } else {
                p.setHTML=function(html) {
                        var ch = (html!=null && html!=this.html);
                        if (ch) {
                                this.html = html;
                                if (this.css) {
                                        var 
sTmp=(this.w==null)?'<NOBR>'+this.html+'</NOBR>':this.html;
                                        while (this.elm.hasChildNodes()) 
this.elm.removeChild(this.elm.firstChild);
                                        var r=this.elm.ownerDocument.createRange();
                                        r.selectNodeContents(this.elm);
                                        r.collapse(true);
                                        var df=r.createContextualFragment(sTmp);
                                        this.elm.appendChild(df);
                                }
                        }
                };
        }
}

p.setAnchor = function(anchor) {
        if (anchor == null) {
                delete this._saveAnchor;
                if (this.parent && this.parent._childAnchors && 
this.parent._childAnchors[this.is]) delete this.parent._childAnchors[this.is];
        }
        else if (this.parent) {
                if (!this.parent._childAnchors) this.parent._childAnchors = {};
                var a = this.parent._childAnchors;
                a[this.id] = anchor;
                this.parent._updateAnchor(this.id);
        }
        else this._saveAnchor = anchor;
};

p.setX=function(x) {this.setLocation(x,null)};
p.setY=function(y) {this.setLocation(null,y)};
p.getX=function() {return this.x||0};
p.getY=function() {return this.y||0};
p.setPageX = function(x) {this.setPageLocation(x,null)};
p.setPageY = function(y) {this.setPageLocation(null,y)};
p.getVisible=function() {return this.visible};
p.setZIndex=function(z) {
        if (typeof(z)=="object") {
                if (z.above) this.z = z.above.z + 1;
                else if (z.below) this.z = z.below.z - 1;
                else if (z.topmost && this.parent) {
                        if (this.parent._topZ==null) this.parent._topZ = 10000;
                        this.z = this.parent._topZ++;
                }
        }
        else this.z = z;
        if (this.css) this.css.zIndex = this.z;
};
p.getZIndex=function() {return this.z};
p.getInnerHTML=function() {
        var s="";
        if (this.html!=null) s+=this.html;
        for (var i=0;i<this.children.length;i++) s+=this.children[i].getOuterHTML();
        return s;
};
p.getHTML = function() {return this.html};
p.setWidth=function(w) {this.setSize(w,null)};
p.setHeight=function(h) {this.setSize(null,h)};
p.getWidth=function() {return this.w||0};
p.getHeight=function() {return this.h||0};
p.getBgImage=function() {return this.bgImage};
p.getBgColor=function() {return this.bgColor};
p.setCursor = function(c) {
        if (!c) c = 'default';
        if (dynapi.ua.ie && this._cursor!=c) {
                this._cursor = c;
                if (this.css) this.css.cursor = c;
        }
};
p.getCursor = function() {return this._cursor};

p.setBgColor=function(c) {
        if (c==null && !dynapi.ua.ns4) c = 'transparent';
        this.bgColor = c;
        if (this.css) {
                if (dynapi.ua.ns4) this.doc.bgColor = c;
                else this.css.backgroundColor = c;
        }
};

p.setBgImage=function(path) {
        this.bgImage=path;
        if (this.css) {
                if (dynapi.ua.ns4) {
                        if (!path) this.setBgColor(this.getBgColor());
                        else setTimeout(this+'.elm.background.src="'+path+'"',1);
                }
                else this.css.backgroundImage='url('+path+')';
        }
};
p.getContentWidth=function() {
        if (this.elm==null) return 0;
        else {
                if (dynapi.ua.ns4) return this.doc.width;
                else if (dynapi.ua.ie) {
                if (dynapi.ua.platform=="mac") return this.elm.offsetWidth;
                return parseInt(this.elm.scrollWidth);
                }
                else {
                        var tw = this.elm.style.width;
                    this.elm.style.width = "auto";
                var w = this.elm.offsetWidth;
                this.elm.style.width = tw;
                return w;
                }
        };
};
p.getContentHeight=function() {
        if (this.elm==null) return 0;
        else {
                if (dynapi.ua.ns4) return this.doc.height;
                else if (dynapi.ua.ie) {
                        if (dynapi.ua.platform=="mac") return this.elm.offsetHeight;
                        return parseInt(this.elm.scrollHeight);
                        }
                else {
                        var th = this.elm.style.height;
                        this.elm.style.height = "auto";
                var h = this.elm.offsetHeight;
                this.elm.style.height = th;
                return h;
                }
        }
};
p.setClip=function(clip) {
        var cc=this.getClip();
        for (var i=0;i<clip.length;i++) if (clip[i]==null) clip[i]=cc[i];
        this.clip=clip;
        if (this.css==null) return;
        var c=this.css.clip;
        if (dynapi.ua.ns4) c.top=clip[0], c.right=clip[1], c.bottom=clip[2], 
c.left=clip[3];
        else this.css.clip="rect("+clip[0]+"px "+clip[1]+"px "+clip[2]+"px 
"+clip[3]+"px)";
};
p.getClip=function() {
        if (this.css==null || !this.css.clip) return [0,0,0,0];
        var c = this.css.clip;
        if (c) {
                if (dynapi.ua.ns4) return [c.top,c.right,c.bottom,c.left];
                if (c.indexOf("rect(")>-1) {
                        c=c.split("rect(")[1].split(")")[0].split("px");
                        for (var i=0;i<c.length;i++) c[i]=parseInt(c[i]);
                        return [c[0],c[1],c[2],c[3]];
                }
                else return [0,this.w,this.h,0];
        }
};

p.slideTo = function(endx,endy,inc,speed) {
        if (!this._slideActive) {
                var x = this.x||0;
                var y = this.y||0;
                if (endx==null) endx = x;
                if (endy==null) endy = y;
                var distx = endx-x;
                var disty = endy-y;
                if (x==endx && y==endy) return;
                var num = Math.sqrt(Math.pow(distx,2) + Math.pow(disty,2))/(inc||10)-1;
                var dx = distx/num;
                var dy = disty/num;
                this._slideActive = true;
                this._slide(dx,dy,endx,endy,num,this.x,this.y,1,(speed||20));
        }
};
p.slideStop = function() {
        this._slideActive = false;
        this.invokeEvent('pathcancel');
};
p._slide = function(dx,dy,endx,endy,num,x,y,i,speed) {
        if (!this._slideActive) this.slideStop();
        else if (i++ < num) {
                this.invokeEvent('pathrun');
                if (this._slideActive) {
                        x += dx;
                        y += dy;
                        this.setLocation(Math.round(x),Math.round(y));
                        
setTimeout(this+'._slide('+dx+','+dy+','+endx+','+endy+','+num+','+x+','+y+','+i+','+speed+')',speed);
                }
                else this.slideStop();
        }
        else {
                this._slideActive = false;
                this.invokeEvent('pathrun');
                this.setLocation(endx,endy);
                this.invokeEvent('pathfinish');
        }
};
--- NEW FILE ---
/*
        DynAPI Distribution
        DynEvent, EventObject, DynElement Classes

        The DynAPI Distribution is distributed under the terms of the GNU LGPL license.
*/

function DynEvent(type,src) {
        this.inherit('DynObject');
        this.type = type;
        this.src = src;
        this.origin = src;
        this.propagate = true;
        this.bubble = false;
        this.bubbleChild = null;
        this.defaultValue = true;
};
var p = dynapi.setPrototype('DynEvent','DynObject');
p.getType = function() {return this.type};
p.getSource = function() {return this.src};
p.getOrigin=function() {return this.origin};
p.stopPropagation = function() {this.propagate = false};
p.preventBubble = function() {this.bubble = false};
p.preventDefault = function() {this.defaultValue = false};
p.getBubbleChild = function() {return this.bubbleChild};

function EventObject() {
        this.inherit('DynObject');
        this._listeners = [];
}
p = dynapi.setPrototype('EventObject','DynObject');
p._addEventListener = DynAPI.functions.Null;
p.addEventListener = function(el) {
        if (el) {
                for (var i=0;i<this._listeners.length;i++) if (this._listeners[i]==el) 
return;
                this._listeners[this._listeners.length] = el;
        
                if (this._listeners.length && this.captureMouseEvents) 
this.captureMouseEvents();
        }
};
p._removeEventListener = DynAPI.functions.Null;
p.removeEventListener = function(el) {
        if (el) {
                DynAPI.functions.removeFromArray(this._listeners, el, false);
                if (!this._listeners.length && this.releaseMouseEvents) 
this.releaseMouseEvents();
        }
};
p.removeAllEventListeners = function() {
        this._listeners = [];
};
p.invokeEvent = function(type,e,args) {
        if (!e) e = new DynEvent(type,this);
        if (this._listeners.length) for (var i=0;i<this._listeners.length;i++) {
                if (this._listeners[i]["on"+type]) 
this._listeners[i]["on"+type](e,args);
                if (!e.propagate) break;
        }
        if (this["on"+type]) this["on"+type](e,args);
        if(e.bubble && this.parent) {
                e.x += e.src.x;
                e.y += e.src.y;
                e.src = this.parent;
                e.bubbleChild = this;
                this.parent.invokeEvent(type,e,args);
        }
};

function DynElement() {
        this.inherit('EventObject');
        this.isChild = false;
        this._created = false;
        this.parent = null;
        this._dyndoc = null;
        this.children = [];
        this._childAnchors = [];
};
p = dynapi.setPrototype('DynElement','EventObject');
p.addChild = function(c) {
        if (!c) return DynAPI.debug.print("Error: no object sent to 
[DynLayer].addChild()");
        if (c.isChild) c.removeFromParent();
        c.isChild = true;
        c.parent = this;
        if (c._saveAnchor) {
                c.setAnchor(c._saveAnchor);
                delete c._saveAnchor;
        }
        if (this._created) c._create();
        this.children[this.children.length] = c;
        return c;
};
p.removeChild = function(c) {
        var l = this.children.length;
        for (var i=0;i<l && this.children[i]!=c;i++);
        if (i!=l) {
                c._remove();
                c._created = false;
                c.isChild = false;
                c.parent = null;
                c.dyndoc = null;
                this.children[i] = this.children[l-1];
                this.children[l-1] = null;
                this.children.length--;
        }
};
p.deleteChild = function(c) {
        c.removeFromParent();
        c._delete();
};
p.deleteAllChildren = function() {
        var l = this.children.length;
        for(var i=0;i<l;i++) {
                this.children[i].del();
                delete this.children[i];
        }
        this.children = [];
};
p.deleteFromParent = function () {
        if (this.parent) this.parent.deleteChild(this);
};
p.removeFromParent = function () {
        if (this.parent) this.parent.removeChild(this);
};
p._create = p._remove = p._delete = p._destroy = DynAPI.functions.Null;
p.getAll = function() {
        var ret = [];
        var temp;
        var l = this.children.length;
        for(var i=0;i<l;i++) {
                ret[this.children[i].id] = this.children[i];
                temp = this.children[i].getAll();
                for(var j in temp) ret[j] = temp[j];
        }
        return ret
};
p.isParentOf = function(obj,equality) {
        if (!obj) return false;
        return (equality && this==obj) || this.getAll()[obj.id]==obj;
};
p.isChildOf = function(obj,equality) {
        if(!obj) return false;
        return (equality && this==obj) || obj.getAll()[this.id]==this;
};
DynElement._flagEvent = function(obj,type) {
        if (type=="create") obj._created = true;
        obj.invokeEvent(type);
        var l=obj.children.length;
        for (var i=0; i<l; i++) {
                DynElement._flagEvent(obj.children[i],type);
        }
};
p.updateAnchor = function() {
        this.parent._updateAnchor(this.id);
};
p._updateAnchor = function(id) {
        var dlyr = DynAPI.document.all[id];
        var a = this._childAnchors[id];
        var tw = this.w;
        var th = this.h;
        if (tw==null && th==null) return;
        var x = a.left;
        var y = a.top;
        var w = null;
        var h = null;
        if (a.centerH!=null) {
                x = Math.ceil(tw/2 - dlyr.getWidth()/2 + a.centerH);
        }
        else if (a.right!=null) {
                if (a.left!=null) w = tw - a.right - a.left;
                else x = tw - dlyr.getWidth() - a.right;
        }
        if (a.centerV!=null) {
                y = Math.ceil(th/2 - dlyr.getHeight()/2 + a.centerV);
        }
        else if (a.bottom!=null) {
                if (a.top!=null) h = th - a.bottom - a.top;
                else y = th - dlyr.getHeight() - a.bottom;
        }
        dlyr.setLocation(x,y);
        dlyr.setSize(w,h);
};
p._updateAnchors = function() {
        var tw = this.w;
        var th = this.h;
        if (tw==null && th==null) return;
        for (id in this._childAnchors) this._updateAnchor(id);
};
--- NEW FILE ---
/*
        DynAPI Distribution
        MouseEvent Class

        The DynAPI Distribution is distributed under the terms of the GNU LGPL license.
        
        requires: dynapi.api.DynDocument
*/

function MouseEvent(type, src) {
        this.inherit('DynEvent',type,src);
        this.bubble = true;
        this._trap = false;
        this._trapSrc = null;
        this._button = 1;
        this._mouseEvent = null;
};
var p = dynapi.setPrototype('MouseEvent','DynEvent');
p.getX = function() {return this.x};
p.getY = function() {return this.y};
p.getPageX = function() {return this.pageX};
p.getPageY = function() {return this.pageY};
p.trapMouseUp = function() {return this._trap = true};
p.getButton = function() {
        if (!this._mouseEvent) return "left";
        var b = DynAPI.ua.ie? this._mouseEvent.button : this._mouseEvent.which;
        if (DynAPI.ua.ie){
                if (b==2) b=3;
                else if (b==4) b=2;
        };
        if (b==2) return "middle";
        if (b==3) return "right";
        else return "left";
};
MouseEvent._e = new MouseEvent();

MouseEvent.docEventHandler = function(e) {
        if (!e.target.lyrobj) {
                routeEvent(e);
                return true;
        }
        else {
                routeEvent(e);
                return MouseEvent._e.defaultValue;
        }
};
MouseEvent.eventHandler = function(e) {
        var dynobject = this.lyrobj;
        if (DynAPI.ua.def) {
                if (DynAPI.ua.ie) var e = window.event;
                e.cancelBubble=true;
        }
        if (DynAPI.ua.def) var realsrc = 
dynapi.functions.getContainerLayerOf(DynAPI.ua.ie?e.srcElement:e.target) || dynobject;
        else if (DynAPI.ua.ns4) var realsrc = e.target.lyrobj || dynobject;
        if (DynAPI.ua.ns4) {
                if (!e.target.lyrobj && (e.type=="mousedown" || e.type=="mouseup" || 
e.type=="click")) {
                        return routeEvent(e);
                }
        }
        if (!realsrc) return true

        if (DynAPI.ua.def) {
                if (e.type=="mouseout" && 
realsrc.isParentOf(dynapi.functions.getContainerLayerOf(DynAPI.ua.ie?e.toElement:e.relatedTarget),true))
 return true;
                if (e.type=="mouseover" && 
realsrc.isParentOf(dynapi.functions.getContainerLayerOf(DynAPI.ua.ie?e.fromElement:e.relatedTarget),true))
 return true;
        }
        var evt = MouseEvent._e;
        var type = e.type;
        evt.type = type;
        evt.src = realsrc;
        evt.bubbleChild = null;
        evt.defaultValue = true;
        evt.bubble = true;

        evt.pageX = DynAPI.ua.ie? e.x+document.body.scrollLeft : 
e.pageX-window.pageXOffset;
        evt.pageY = DynAPI.ua.ie? e.y+document.body.scrollTop : 
e.pageY-window.pageYOffset;
        evt.x = DynAPI.ua.ie? evt.pageX-evt.src.getPageX() : e.layerX;
        evt.y = DynAPI.ua.ie? evt.pageY-evt.src.getPageY() : e.layerY;

        evt._mouseEvent = e;
        if (DynAPI.ua.def) {
                if (evt.type=='mouseover') {
                        var fromL = 
dynapi.functions.getContainerLayerOf(DynAPI.ua.ie?e.fromElement:e.relatedTarget);
                        if(fromL && fromL.isChildOf(realsrc.parent,true)) 
evt.preventBubble();
                }
                if (evt.type=='mouseout') {
                        var toL = 
dynapi.functions.getContainerLayerOf(DynAPI.ua.ie?e.toElement:e.relatedTarget);
                        if(toL && toL.isChildOf(realsrc.parent,true)) 
evt.preventBubble();
                }
        }
        else if (DynAPI.ua.ns4 && (e.type=="mouseover" || e.type=="mouseout")) 
evt.preventBubble();
        if (DynAPI.ua.def) {
                if (e.type=='mousedown') evt._trap = false;
                if (e.type=='mouseup' && evt._trap) evt.src = realsrc = evt._trapSrc;
        }
        evt.origin = realsrc;
        realsrc.invokeEvent(type,evt);
        if (DynAPI.ua.def) { 
                if (e.type=='mousedown') {
                        if (evt._trap) evt._trapSrc = realsrc; 
                }
        }
        return evt.defaultValue;
};

DynDocument.prototype.captureMouseEvents = function() {
        if(DynAPI.ua.def&&!DynAPI.ua.ie) {
                this.doc.addEventListener("mousemove",MouseEvent.eventHandler,false);
                this.doc.addEventListener("mousedown",MouseEvent.eventHandler,false);
                this.doc.addEventListener("mouseup",MouseEvent.eventHandler,false);
                this.doc.addEventListener("mouseover",MouseEvent.eventHandler,false);
                this.doc.addEventListener("mouseout",MouseEvent.eventHandler,false);
                this.doc.addEventListener("click",MouseEvent.eventHandler,false);
                this.doc.addEventListener("dblclick",MouseEvent.eventHandler,false);
        }
        else {
                if (DynAPI.ua.ns4) this.doc.captureEvents(Event.MOUSEMOVE | 
Event.MOUSEDOWN | Event.MOUSEUP | Event.CLICK | Event.DBLCLICK);
                
this.doc.onmousemove=this.doc.onmousedown=this.doc.onmouseup=this.doc.onclick=this.doc.onclick=this.doc.ondblclick=MouseEvent.eventHandler;
        }
};
DynDocument.prototype.releaseMouseEvents=function() {
        if(DynAPI.ua.def&&!DynAPI.ua.ie) {
                
this.doc.removeEventListener("mousemove",MouseEvent.eventHandler,false);
                
this.doc.removeEventListener("mousedown",MouseEvent.eventHandler,false);
                this.doc.removeEventListener("mouseup",MouseEvent.eventHandler,false);
                
this.doc.removeEventListener("mouseover",MouseEvent.eventHandler,false);
                this.doc.removeEventListener("mouseout",MouseEvent.eventHandler,false);
                this.doc.removeEventListener("click",MouseEvent.eventHandler,false);
                this.doc.removeEventListener("dblclick",MouseEvent.eventHandler,false);
        }
        else {
                if (DynAPI.ua.ns4) this.doc.releaseEvents(Event.MOUSEMOVE | 
Event.MOUSEDOWN | Event.MOUSEUP | Event.CLICK | Event.DBLCLICK);
                
this.doc.onmousemove=this.doc.onmousedown=this.doc.onmouseup=this.doc.onclick=this.doc.ondblclick=null;
        }
};

DynLayer.prototype.captureMouseEvents = function() {
        var elm=this.elm;
        if(!elm) return;
        if(DynAPI.ua.def&&!DynAPI.ua.ie) {
                elm.addEventListener("mousemove",MouseEvent.eventHandler,false);
                elm.addEventListener("mousedown",MouseEvent.eventHandler,false);
                elm.addEventListener("mouseup",MouseEvent.eventHandler,false);
                elm.addEventListener("mouseover",MouseEvent.eventHandler,false);
                elm.addEventListener("mouseout",MouseEvent.eventHandler,false);
                elm.addEventListener("click",MouseEvent.eventHandler,false);
                elm.addEventListener("dblclick",MouseEvent.eventHandler,false);
                elm.ondragstart = dynapi.functions.False;
                elm.onselectstart = dynapi.functions.False;
        }
        else {
                if (DynAPI.ua.ns4) elm.captureEvents(Event.MOUSEDOWN | Event.MOUSEUP | 
Event.CLICK | Event.DBLCLICK | Event.MOUSEMOVE);
                
elm.onmousemove=elm.onmousedown=elm.onmouseup=elm.onmouseover=elm.onmouseout=elm.onclick=elm.ondblclick
 = MouseEvent.eventHandler;
        }
};
DynLayer.prototype.releaseMouseEvents=function() {
        var elm=this.elm;
        if(!elm) return;
        if(DynAPI.ua.def&&!DynAPI.ua.ie) {
                elm.removeEventListener("mousemove",MouseEvent.eventHandler,false);
                elm.removeEventListener("mousedown",MouseEvent.eventHandler,false);
                elm.removeEventListener("mouseup",MouseEvent.eventHandler,false);
                elm.removeEventListener("mouseover",MouseEvent.eventHandler,false);
                elm.removeEventListener("mouseout",MouseEvent.eventHandler,false);
                elm.removeEventListener("click",MouseEvent.eventHandler,false);
                elm.removeEventListener("dblclick",MouseEvent.eventHandler,false);
        }
        else {
                if (DynAPI.ua.ns4) elm.releaseEvents(Event.MOUSEDOWN | Event.MOUSEUP | 
Event.CLICK | Event.DBLCLICK | Event.MOUSEMOVE);
                
elm.onmousemove=elm.onmousedown=elm.onmouseup=elm.onclick=elm.ondblclick=null;
        }
};

DynElement.prototype.assignMouseEvents = function() {
        if (this._listeners.length) this.captureMouseEvents();
};


_______________________________________________
Dynapi-CVS mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dynapi-cvs

Reply via email to