Update of /cvsroot/dynapi/dynapi3x/src/api
In directory sc8-pr-cvs1:/tmp/cvs-serv11568/src/api

Modified Files:
        dyndocument.js dynlayer_base.js dynlayer_dom.js dynlayer_ie.js 
        dynlayer_ns4.js dynlayer_opera.js event.js mouse_dom.js 
        mouse_ie.js mouse_ns4.js 
Log Message:
uploaded by raymond - includes kevin's patches

Index: dyndocument.js
===================================================================
RCS file: /cvsroot/dynapi/dynapi3x/src/api/dyndocument.js,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -r1.6 -r1.7
*** dyndocument.js      26 Mar 2003 02:22:31 -0000      1.6
--- dyndocument.js      30 Mar 2003 17:13:18 -0000      1.7
***************
*** 21,25 ****
        var o = this;
        this.frame.onresize = function() {o._handleResize()};
!       this.onResizeNS4 = "reload" // or "redraw"
        this.fgColor = this.doc.fgColor||'';
        this.bgColor = this.doc.bgColor||'';
--- 21,25 ----
        var o = this;
        this.frame.onresize = function() {o._handleResize()};
!       this.onResizeNS4 = "reload"; // or "redraw"
        this.fgColor = this.doc.fgColor||'';
        this.bgColor = this.doc.bgColor||'';
***************
*** 27,33 ****
  };
  var p = dynapi.setPrototype('DynDocument','DynElement');
- p.getBgColor = function() {
-       return this.bgColor;
- };
  p._remove = function() {
        this.elm=null;
--- 27,30 ----
***************
*** 35,38 ****
--- 32,38 ----
        this.frame=null;
  };
+ p.getBgColor = function() {
+       return this.bgColor;
+ };
  p.getX = p.getY = p.getPageX = p.getPageY = dynapi.functions.Zero;
  p.getWidth = function() {
***************
*** 116,120 ****
        // create divs object - speeds up DOM browsers on Win32. Linux & Mac?
        if (ua.ie||ua.dom) {
!               divs={} 
                var dv,all=(ua.ie||ua.opera)? document.all.tags('div') : 
document.getElementsByTagName('div');
                var i=0,l=all.length; // very important!
--- 116,120 ----
        // create divs object - speeds up DOM browsers on Win32. Linux & Mac?
        if (ua.ie||ua.dom) {
!               divs={};
                var dv,all=(ua.ie||ua.opera)? document.all.tags('div') : 
document.getElementsByTagName('div');
                var i=0,l=all.length; // very important!

Index: dynlayer_base.js
===================================================================
RCS file: /cvsroot/dynapi/dynapi3x/src/api/dynlayer_base.js,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -r1.1 -r1.2
*** dynlayer_base.js    26 Mar 2003 02:22:31 -0000      1.1
--- dynlayer_base.js    30 Mar 2003 17:13:19 -0000      1.2
***************
*** 121,124 ****
--- 121,125 ----
        var i,ch=this.children;
        if (this.html!=null) s+=this.html;
+       if (this._blkBoardElm) s=('<div id="'+this.id+'_blkboard">'+s+'</div>');
        for (i=0;i<ch.length;i++) s+=ch[i].getOuterHTML();
        return s;       
***************
*** 156,160 ****
        if (ch) this.h = h<0? 0 : h;
        if (cw||ch) {
!               if (this._updateAnchors) this._updateAnchors();
                if (this.css) {
                        if (cw) this.css.width = this.w||0;
--- 157,162 ----
        if (ch) this.h = h<0? 0 : h;
        if (cw||ch) {
!               if (this._hasAnchor) this.updateAnchor(); // update this anchor
!               if (this._hasChildAnchors) this._updateAnchors(); // update child 
anchors
                if (this.css) {
                        if (cw) this.css.width = this.w||0;
***************
*** 197,201 ****
        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) {
--- 199,204 ----
        if (anchor == null) {
                delete this._saveAnchor;
!               if (this.parent && this.parent._childAnchors && 
this.parent._childAnchors[this.id]) delete this.parent._childAnchors[this.id];
!               this._hasAnchor = false;
        }
        else if (this.parent) {
***************
*** 204,207 ****
--- 207,211 ----
                a[this.id] = anchor;
                this.parent._updateAnchor(this.id);
+               this._hasAnchor = this.parent._hasChildAnchors = true;
        }
        else this._saveAnchor = anchor;

Index: dynlayer_dom.js
===================================================================
RCS file: /cvsroot/dynapi/dynapi3x/src/api/dynlayer_dom.js,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -r1.5 -r1.6
*** dynlayer_dom.js     26 Mar 2003 02:22:31 -0000      1.5
--- dynlayer_dom.js     30 Mar 2003 17:13:19 -0000      1.6
***************
*** 36,39 ****
--- 36,40 ----
        dlyr.elm._dynobj = dlyr;
        dlyr._dyndoc = dlyr.parent._dyndoc;
+       if(dlyr._blkBoardElm) dlyr._blkBoardElm = (divs)? divs[dlyr.id+'_blkboard'] : 
dlyr.parent.doc.getElementById(dlyr.id+'_blkboard');
  
        if (dlyr.z) dlyr.css.zIndex = dlyr.z;
***************
*** 53,56 ****
--- 54,70 ----
  
  };
+ p.enableBlackboard = function(){
+       if (!this._created) this._blkBoardElm=true;
+       else if(!this._blkBoardElm){
+               var r,ptxt;
+               var h='',elm = this.elm;
+               if(this.html!=null) h=this.html;
+               r = elm.ownerDocument.createRange();
+               r.setStartBefore(elm);
+               ptxt = r.createContextualFragment('<div 
id="'+this.id+'_blkboard">'+h+'</div>');
+               elm.appendChild(ptxt);
+               this._blkBoardElm = elm.lastChild;              
+       }
+ };
  p.setLocation=function(x,y) {
        var cx = (x!=null && x!=this.x);
***************
*** 62,65 ****
--- 76,80 ----
                if (cy) this.css.top = this.y+"px";
        }
+       if(this._hasLocationEvents) this.invokeEvent('locationchange');
        return (cx||cy);
  };
***************
*** 75,85 ****
                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);
                }
        }
--- 90,102 ----
                this.html = html;
                if (this.css) {
+                       var elm = (this._blkBoardElm)? this._blkBoardElm:this.elm;
+                       elm.innerHTML = html;           
                        var sTmp=(this.w==null)?'<NOBR>'+this.html+'</NOBR>':this.html;
!                       while (elm.hasChildNodes()) elm.removeChild(elm.firstChild);
!                       var r=elm.ownerDocument.createRange();
!                       r.selectNodeContents(elm);
                        r.collapse(true);
                        var df=r.createContextualFragment(sTmp);
!                       elm.appendChild(df);
                }
        }
***************
*** 87,91 ****
  };
  p.setTextSelectable=function(b) {
!       this._textSelectable = b
        if(!this._hasMouseEvents) this.captureMouseEvents();
        if (!b) this.setCursor('default');
--- 104,108 ----
  };
  p.setTextSelectable=function(b) {
!       this._textSelectable = b;
        if(!this._hasMouseEvents) this.captureMouseEvents();
        if (!b) this.setCursor('default');

Index: dynlayer_ie.js
===================================================================
RCS file: /cvsroot/dynapi/dynapi3x/src/api/dynlayer_ie.js,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -r1.6 -r1.7
*** dynlayer_ie.js      26 Mar 2003 02:22:31 -0000      1.6
--- dynlayer_ie.js      30 Mar 2003 17:13:19 -0000      1.7
***************
*** 29,33 ****
                        elm.style.backgroundColor=(this.bgColor||'transparent');
                        elm.style.zIndex=(this.z||1);
!                       elm.style.cursor=(this._cursor||'auto')
                        elm.style.overflow=(this._overflow!=null)? 'hidden':'';        
         
                        if(this.bgImage!=null) 
elm.style.backgroundImage='url('+this.bgImage+')';
--- 29,33 ----
                        elm.style.backgroundColor=(this.bgColor||'transparent');
                        elm.style.zIndex=(this.z||1);
!                       elm.style.cursor=(this._cursor||'auto');
                        elm.style.overflow=(this._overflow!=null)? 'hidden':'';        
         
                        if(this.bgImage!=null) 
elm.style.backgroundImage='url('+this.bgImage+')';
***************
*** 53,56 ****
--- 53,57 ----
        dlyr.elm._dynobj = dlyr;
        dlyr._dyndoc = dlyr.parent._dyndoc;
+       if(dlyr._blkBoardElm) dlyr._blkBoardElm = (divs)? divs[dlyr.id+'_blkboard'] : 
dlyr.parent.elm.all[dlyr.id+'_blkboard'];
  
        if (dlyr.html!=null && dlyr.html!='' && (dlyr.w==null || dlyr.h==null)) {
***************
*** 73,76 ****
--- 74,86 ----
  
  };
+ p.enableBlackboard = function(){
+       if (!this._created) this._blkBoardElm=true;
+       else if(!this._blkBoardElm){
+               var h='',elm = this.elm;
+               if(this.html!=null) h=this.html;
+               elm.insertAdjacentHTML("beforeEnd",'<div 
id="'+this.id+'_blkboard">'+h+'</div>');
+               this._blkBoardElm = elm.children[elm.children.length-1];
+       }
+ };
  p.setLocation=function(x,y) {
        var cx = (x!=null && x!=this.x);
***************
*** 98,121 ****
        return this.setLocation(x,y);
  };
- 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._updateAnchors) this._updateAnchors();
-               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)';
-                       if (this.updateLayout) this.updateLayout();
-               }
-       }
-       return (cw||ch);
- };
  p.setHTML = function(html) {
        if (html!=this.html) {
                this.html = html;
!               if (this.css) this.elm.innerHTML = html;
        }
        if(this._hasContentEvents) this.invokeEvent('contentchange');   
--- 108,118 ----
        return this.setLocation(x,y);
  };
  p.setHTML = function(html) {
        if (html!=this.html) {
                this.html = html;
!               if (this.css) {
!                       var elm = (this._blkBoardElm)? this._blkBoardElm:this.elm;
!                       elm.innerHTML = html;
!               }
        }
        if(this._hasContentEvents) this.invokeEvent('contentchange');   

Index: dynlayer_ns4.js
===================================================================
RCS file: /cvsroot/dynapi/dynapi3x/src/api/dynlayer_ns4.js,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -r1.5 -r1.6
*** dynlayer_ns4.js     26 Mar 2003 02:22:31 -0000      1.5
--- dynlayer_ns4.js     30 Mar 2003 17:13:19 -0000      1.6
***************
*** 65,68 ****
--- 65,72 ----
        dlyr.elm._dynobj = dlyr; // ???
        dlyr._dyndoc = dlyr.parent._dyndoc;
+       if(dlyr._blkBoardElm) {
+               dlyr._blkBoardElm = elm.document.layers[dlyr.id+'_blkboard'];
+               dlyr.doc = dlyr._blkBoardElm; // useful for <forms>
+       }
  
        if (dlyr.html!=null && dlyr.html!='' && (dlyr.w==null || dlyr.h==null)) {
***************
*** 103,109 ****
--- 107,130 ----
                else s+=this.html;
        }
+       if (this._blkBoardElm) s=('<layer id="'+this.id+'_blkboard">'+s+'</layer>');   
 
        for (i=0;i<this.children.length;i++) s+=this.children[i].getOuterHTML();
        return s;
  };
+ p.enableBlackboard = function(){
+       if (!this._created) this._blkBoardElm=true;
+       else if(!this._blkBoardElm){
+               var c,i,h='',elm = this.elm;
+               if(this.html!=null) h=this.html;                
+               var parentElement = this.parent.isClass('DynLayer')? this.parent.elm : 
this.parent.frame;
+               var elm = this._blkBoardElm = new Layer(0, elm);
+               elm.document.write(h);
+               elm.document.close();
+               elm.visibility = 'inherit';
+               for (i=0;i<this.children.length;i++){
+                       c=this.children[i];
+                       c.css.zIndex=c.css.zIndex; // reset zindex
+               }               
+       }
+ };
  p.setLocation = function(x,y) {
        var cx = (x!=null && x!=this.x);
***************
*** 187,191 ****
        if (ch) this.h = h<0? 0 : h;
        if (cw||ch) {
!               if (this._updateAnchors) this._updateAnchors();
                if (this.css) {
                        if (cw) this.css.clip.width = this.w || 0;
--- 208,213 ----
        if (ch) this.h = h<0? 0 : h;
        if (cw||ch) {
!               if (this._hasAnchor) this.updateAnchor(); // update this anchor
!               if (this._hasChildAnchors) this._updateAnchors(); // update child 
anchors
                if (this.css) {
                        if (cw) this.css.clip.width = this.w || 0;
***************
*** 202,211 ****
                this.html = html;
                if (this.css) {
!                       this.doc.open();
!                       this.doc.write(this.html);
!                       this.doc.close();
                        var i;
!                       for (i=0;i<this.doc.images.length;i++) 
this.doc.images[i]._dynobj = this;
!                       for (i=0;i<this.doc.links.length;i++) 
this.doc.links[i]._dynobj = this;
                }
        }
--- 224,234 ----
                this.html = html;
                if (this.css) {
!                       var doc = (this._blkBoardElm)? 
this._blkBoardElm.document:this.doc;
!                       doc.open();
!                       doc.write(this.html);
!                       doc.close();
                        var i;
!                       for (i=0;i<doc.images.length;i++) doc.images[i]._dynobj = this;
!                       for (i=0;i<doc.links.length;i++) doc.links[i]._dynobj = this;
                }
        }
***************
*** 213,217 ****
  };
  p.setTextSelectable=function(b) {
!       this._textSelectable = b
        this.addEventListener({
                onmousemove : function(e) {
--- 236,240 ----
  };
  p.setTextSelectable=function(b) {
!       this._textSelectable = b;
        this.addEventListener({
                onmousemove : function(e) {

Index: dynlayer_opera.js
===================================================================
RCS file: /cvsroot/dynapi/dynapi3x/src/api/dynlayer_opera.js,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -r1.5 -r1.6
*** dynlayer_opera.js   26 Mar 2003 02:22:31 -0000      1.5
--- dynlayer_opera.js   30 Mar 2003 17:13:19 -0000      1.6
***************
*** 41,44 ****
--- 41,45 ----
        dlyr.elm._dynobj = dlyr;
        dlyr._dyndoc = dlyr.parent._dyndoc;
+       if(dlyr._blkBoardElm) dlyr._blkBoardElm = (divs)? divs[dlyr.id+'_blkboard'] : 
dlyr.parent.doc.getElementById(dlyr.id+'_blkboard');
  
        if (dlyr.html!=null && dlyr.html!='' && (dlyr.w==null || dlyr.h==null)) {
***************
*** 57,60 ****
--- 58,70 ----
        if (dlyr._hasKeyEvents) dlyr.captureKeyEvents();
  };
+ p.enableBlackboard = function(){
+       if (!this._created) this._blkBoardElm=true;
+       else if(!this._blkBoardElm){
+               var h='',elm = this.elm;
+               if(this.html!=null) h=this.html;
+               elm.insertAdjacentHTML("beforeEnd",'<div 
id="'+this.id+'_blkboard">'+h+'</div>');
+               this._blkBoardElm = elm.children[elm.children.length-1];
+       }
+ };
  p.setLocation=function(x,y) {
        var cx = (x!=null && x!=this.x);
***************
*** 85,94 ****
        if (html!=this.html) {
                this.html = html;
!               if (this.css) this.elm.innerHTML = html;
        }
        if(this._hasContentEvents) this.invokeEvent('contentchange');
  };
  p.setTextSelectable=function(b) {
!       this._textSelectable = b
        if (this.elm) this.elm.onselectstart = b? dynapi.functions.Allow : 
dynapi.functions.Deny;
        if (!b) this.setCursor('default');
--- 95,107 ----
        if (html!=this.html) {
                this.html = html;
!               if (this.css) {
!                       var elm = (this._blkBoardElm)? this._blkBoardElm:this.elm;
!                       elm.innerHTML = html;
!               }
        }
        if(this._hasContentEvents) this.invokeEvent('contentchange');
  };
  p.setTextSelectable=function(b) {
!       this._textSelectable = b;
        if (this.elm) this.elm.onselectstart = b? dynapi.functions.Allow : 
dynapi.functions.Deny;
        if (!b) this.setCursor('default');

Index: event.js
===================================================================
RCS file: /cvsroot/dynapi/dynapi3x/src/api/event.js,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -r1.5 -r1.6
*** event.js    26 Mar 2003 02:22:31 -0000      1.5
--- event.js    30 Mar 2003 17:13:20 -0000      1.6
***************
*** 27,31 ****
        this.DynObject();
        this._listeners = [];
! }
  EventObject._SubClass={};
  
--- 27,31 ----
        this.DynObject();
        this._listeners = [];
! };
  EventObject._SubClass={};
  
***************
*** 49,58 ****
                        else this._hasMouseEvents = true;
                }
!               if (this.captureKeyEvents) {
!                       if (this._created && !this._hasKeyEvents && (el.onkeydown || 
el.onkeyup || el.keypress)) {
!                               this.captureKeyEvents();
!                       }
!                       else this._hasKeyEvents = true;
!               }
        }
  };
--- 49,54 ----
                        else this._hasMouseEvents = true;
                }
!               if (this.captureKeyEvents) 
!                       if (this._created && !this._hasKeyEvents && (el.onkeydown || 
el.onkeyup || el.onkeypress)) this.captureKeyEvents();
        }
  };
***************
*** 97,101 ****
        var cls=EventObject._SubClass;
        if(typeof(fn)=='function') cls[ek]=fn;
!       else if(!fn && cls[ek]) delete(cls[ek])
  };
  
--- 93,97 ----
        var cls=EventObject._SubClass;
        if(typeof(fn)=='function') cls[ek]=fn;
!       else if(!fn && cls[ek]) delete cls[ek];
  };
  
***************
*** 134,137 ****
--- 130,134 ----
        if (c._saveAnchor) {
                c.setAnchor(c._saveAnchor);
+               c._saveAnchor = null;
                delete c._saveAnchor;
        }
***************
*** 179,183 ****
  p._create = p._createInLine = p._createInserted = p._remove = p._delete = p._destroy 
= dynapi.functions.Null;
  
! p.getChildren = function() {return this.children}
  p.getAllChildren = function() {
        var ret = [];
--- 176,180 ----
  p._create = p._createInLine = p._createInserted = p._remove = p._delete = p._destroy 
= dynapi.functions.Null;
  
! p.getChildren = function() {return this.children};
  p.getAllChildren = function() {
        var ret = [];
***************
*** 189,193 ****
                for(var j in temp) ret[j] = temp[j];
        }
!       return ret
  };
  p.getParents = function(l) {
--- 186,190 ----
                for(var j in temp) ret[j] = temp[j];
        }
!       return ret;
  };
  p.getParents = function(l) {
***************
*** 306,311 ****
--- 303,312 ----
        if(padX) {x=(x)? x:0;x+=padX}
        if(padY) {y=(y)? y:0;y+=padY}
+ 
+       var tmp=dlyr._hasAnchor;        
+       dlyr._hasAnchor=false; // ignore anchor updates of this layer
        if(x!=null||y!=null) dlyr.setLocation(x,y);
        if(w!=null||h!=null) dlyr.setSize(w,h);
+       dlyr._hasAnchor = tmp; // useful for preventing stack overflow
  };
  p._updateAnchors = function() {

Index: mouse_dom.js
===================================================================
RCS file: /cvsroot/dynapi/dynapi3x/src/api/mouse_dom.js,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -r1.2 -r1.3
*** mouse_dom.js        25 Feb 2003 21:38:20 -0000      1.2
--- mouse_dom.js        30 Mar 2003 17:13:20 -0000      1.3
***************
*** 125,128 ****
  };
  
! function main() { dynapi.document._mouseEvent = new MouseEvent(dynapi.document);}
  if (!dynapi.loaded) main();
--- 125,130 ----
  };
  
! function main() { 
!       dynapi.document._mouseEvent = new MouseEvent(dynapi.document);
! };
  if (!dynapi.loaded) main();

Index: mouse_ie.js
===================================================================
RCS file: /cvsroot/dynapi/dynapi3x/src/api/mouse_ie.js,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -r1.2 -r1.3
*** mouse_ie.js 25 Feb 2003 21:38:20 -0000      1.2
--- mouse_ie.js 30 Mar 2003 17:13:20 -0000      1.3
***************
*** 116,119 ****
  };
  
! function main() { dynapi.document._mouseEvent = new MouseEvent(dynapi.document); }
  if (!dynapi.loaded) main();
--- 116,121 ----
  };
  
! function main() { 
!       dynapi.document._mouseEvent = new MouseEvent(dynapi.document); 
! };
  if (!dynapi.loaded) main();

Index: mouse_ns4.js
===================================================================
RCS file: /cvsroot/dynapi/dynapi3x/src/api/mouse_ns4.js,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -r1.3 -r1.4
*** mouse_ns4.js        25 Feb 2003 21:45:17 -0000      1.3
--- mouse_ns4.js        30 Mar 2003 17:13:20 -0000      1.4
***************
*** 1 ****
! /*
        DynAPI Distribution
        MouseEvent Class

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

function MouseEvent(dyndoc) {
        this.DynEvent = DynEvent;
        this.DynEvent();
        this.bubble = true;
        this._browserEvent = null;
        this._relative = null;
        this._dyndoc = dyndoc;
};
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 = dynapi.functions.Null;
p.getRelative = function() {return this._relative};
p.getButton = function() {
        if (!this._browserEvent) return "left";
        var b = this._browserEvent.which;
        if (b==2) return "middle";
        if (b==3) return "right";
        else return "left";
};
p._init = function(type,e,src) {
        this.type = type;
        this._browserEvent = e;
        this.origin = src;
        this.bubbleChild = null;
        this.pageX = e.pageX-this._dyndoc.frame.pageXOffset;
        this.pageY = e.pageY-this._dyndoc.frame.pageYOffset;
        if (e.target._dynobj == src) {
                this.x = e.layerX;
                this.y = e.layerY;
        }
        else {
                this.x = e.pageX - (src.pageX||0);
                this.y = e.pageY - (src.pageY||0);
        }
        this.defaultValue = true;
        this.bubble = true;
};
p._invoke = function() {
        var o = this.origin;
        //if (this.type=='mousedown' && o._textSelectable==false) this.defaultValue = 
false;
        o.invokeEvent(this.type,this);
        
        // synthetic click event
        if (this.type=='mouseup') {
                this._init('click',this._browserEvent,o);
                this._invoke();
                
                // synthetic dblclick event
                if (dynapi.ua.other);
        }
};

function main() {
        dynapi.document._mouseEvent = new MouseEvent(dynapi.document);
}
if (!dynapi.loaded) main();


MouseEvent._docMoveHandler = function(e) {
        var dyndoc = this._dynobj;
        var src = e.target;
        var dynobj = src._dynobj || src._dynobji;
        if (!dynobj) {
                dyndoc._moveOver = null;
                return true;
        }
        
        var me = dyndoc._mouseEvent;
        //dynapi.debug.status('move '+dynobj.name+' '+e.layerX+' '+e.layerY);
        me._init('mousemove',e,dynobj);
        me._invoke();
        var defaultVal = me.defaultValue;
        
        // synthetic mouseover/out events
        if (dyndoc._moveOver!=dynobj) {
                var rel = dyndoc._moveOver;
                var bubble = true;
                // mouse out
                if (rel) {  //  && !rel.isChildOf(dynobj)
                        // during mouseout e.getRelated() is which elm it is moving to
                        //bubble = !dynobj.isChildOf(rel);
                        me._init('mouseout',e,rel);
                        me._relative = dynobj;
                        me._invoke();
                        
//MouseEvent._generateEvent('mouseout',e,me,rel,dynobj,bubble);  // out occurs before 
over
                }
                // mouse over
                dyndoc._moveOver = dynobj;
                //if (rel) var bubble = !rel.isChildOf(dynobj);
                //var bubble = !dynobj.isChildOf(rel);
                // during mouseover e.getRelated() is which elm it is moving to
                me._init('mouseover',e,dynobj);
                me._relative = rel;
                me._invoke();
                //MouseEvent._generateEvent('mouseover',e,me,dynobj,rel);
        }
        return defaultVal;
}

MouseEvent._eventHandler = function(e) {
        var src = e.target;
        var dynobj = this._dynobj;
        if (!dynobj) return true;
        
        var dyndoc = dynobj._dyndoc;
        var me = dyndoc._mouseEvent;
        me._wasHandled = false;
        
        var r = routeEvent(e);
        if (!me._wasHandled) {
                //if (src._dynobji) {  // src._dynobji == 
dynlayer.doc.images[x]._dynobji
                //      me._init(e.type,e,src._dynobji);
                //      if (e.type=='mousedown') me.defaultValue = false;
                //      me._invoke();
                //}
                // else 
                if (src._dynobj) {  // src._dynobj == 
dynlayer.doc._dynobj,dynlayer.doc.images[x]._dynobj,dynlayer.doc.links[x]._dynobj
                        me._init(e.type,e,src._dynobj);
                        me._invoke();
                }
                else {  // dynobj == dynlayer.elm._dynobj
                        me._init(e.type,e,dynobj);
                        me._invoke();
                }
                me._wasHandled = true;
        }

        dynobj = (src._dynobj)? src._dynobj:dynobj;

        // prevent image dragging
        if (e.type=='mousedown' && (e.target+'')=='[object Image]') {
                me.defaultValue=false;
        }
                
        // disable text select
        if (e.type=='mousedown' && dynobj._textSelectable==false) {
                // ns4 will disable hyperlinks. this is my workaround
                me.defaultValue =(e.target.href)? null:false;
        }
        
        return me.defaultValue;
};

DynElement.prototype.captureMouseEvents = function() {
        this._hasMouseEvents = true;
        var elm = this.elm;
        if (elm) {
                elm.captureEvents(Event.MOUSEDOWN | Event.MOUSEUP | Event.DBLCLICK);
                elm.onmousedown = elm.onmouseup = elm.ondblclick = 
MouseEvent._eventHandler;
                
                if (this.getClassName()=='DynDocument') {  // move/over/out events are 
generated from the document
                        this.doc.captureEvents(Event.MOUSEMOVE);
                        elm.onmousemove = MouseEvent._docMoveHandler;
                }
                elm._dynobj = this;
                this.doc._dynobj = this;
                for (var i=0;i<this.doc.images.length;i++) 
this.doc.images[i]._dynobj=this; // was _dynobji
                for (var i=0;i<this.doc.links.length;i++) 
this.doc.links[i]._dynobj=this;
        }
};

DynElement.prototype.releaseMouseEvents = function() {
        this._hasMouseEvents = false;
        var elm = this.elm;
        if (elm) {
                elm.releaseEvents(Event.MOUSEDOWN | Event.MOUSEUP | Event.DBLCLICK);
                elm.onmousedown = elm.onmouseup = elm.ondblclick = null;
                
                if (this.getClassName()=='DynDocument') {
                        elm.releaseEvents(Event.MOUSEMOVE);
                        elm.onmousemove = null;
                }
                elm._dynobj = null;
                this.doc._dynobj = null;
                for (var i=0;i<this.doc.images.length;i++) 
this.doc.images[i]._dynobji=null;
                for (var i=0;i<this.doc.links.length;i++) 
this.doc.links[i]._dynobj=null;
        }
};
\ No newline at end of file
--- 1 ----
! /*
        DynAPI Distribution
        MouseEvent Class

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

function MouseEvent(dyndoc) {
        this.DynEvent = DynEvent;
        this.DynEvent();
        this.bubble = true;
        this._browserEvent = null;
        this._relative = null;
        this._dyndoc = dyndoc;
};
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 = dynapi.functions.Null;
p.getRelative = function() {return this._relative};
p.getButton = function() {
        if (!this._browserEvent) return "left";
        var b = this._browserEvent.which;
        if (b==2) return "middle";
        if (b==3) return "right";
        else return "left";
};
p._init = function(type,e,src) {
        this.type = type;
        this._browserEvent = e;
        this.origin = src;
        this.bubbleChild = null;
        this.pageX = e.pageX-this._dyndoc.frame.pageXOffset;
        this.pageY = e.pageY-this._dyndoc.frame.pageYOffset;
        if (e.target._dynobj == src) {
                this.x = e.layerX;
                this.y = e.layerY;
        }
        else {
                this.x = e.pageX - (src.pageX||0);
                this.y = e.pageY - (src.pageY||0);
        }
        this.defaultValue = true;
        this.bubble = true;
};
p._invoke = function() {
        var o = this.origin;
        //if (this.type=='mousedown' && o._textSelectable==false) this.defaultValue = 
false;
        o.invokeEvent(this.type,this);
        
        // synthetic click event
        if (this.type=='mouseup') {
                this._init('click',this._browserEvent,o);
                this._invoke();
                
                // synthetic dblclick event
                if (dynapi.ua.other);
        }
};

function main() {
        dynapi.document._mouseEvent = new MouseEvent(dynapi.document);
};
if (!dynapi.loaded) main();


MouseEvent._docMoveHandler = function(e) {
        var dyndoc = this._dynobj;
        var src = e.target;
        var dynobj = src._dynobj || src._dynobji;
        if (!dynobj) {
                dyndoc._moveOver = null;
                return true;
        }
        
        var me = dyndoc._mouseEvent;
        //dynapi.debug.status('move '+dynobj.name+' '+e.layerX+' '+e.layerY);
        me._init('mousemove',e,dynobj);
        me._invoke();
        var defaultVal = me.defaultValue;
        
        // synthetic mouseover/out events
        if (dyndoc._moveOver!=dynobj) {
                var rel = dyndoc._moveOver;
                var bubble = true;
                // mouse out
                if (rel) {  //  && !rel.isChildOf(dynobj)
                        // during mouseout e.getRelated() is which elm it is moving to
                        //bubble = !dynobj.isChildOf(rel);
                        me._init('mouseout',e,rel);
                        me._relative = dynobj;
                        me._invoke();
                        
//MouseEvent._generateEvent('mouseout',e,me,rel,dynobj,bubble);  // out occurs before 
over
                }
                // mouse over
                dyndoc._moveOver = dynobj;
                //if (rel) var bubble = !rel.isChildOf(dynobj);
                //var bubble = !dynobj.isChildOf(rel);
                // during mouseover e.getRelated() is which elm it is moving to
                me._init('mouseover',e,dynobj);
                me._relative = rel;
                me._invoke();
                //MouseEvent._generateEvent('mouseover',e,me,dynobj,rel);
        }
        return defaultVal;
};

MouseEvent._eventHandler = function(e) {
        var src = e.target;
        var dynobj = this._dynobj;
        if (!dynobj) return true;
        
        var dyndoc = dynobj._dyndoc;
        var me = dyndoc._mouseEvent;
        me._wasHandled = false;
        
        var r = routeEvent(e);
        if (!me._wasHandled) {
                //if (src._dynobji) {  // src._dynobji == 
dynlayer.doc.images[x]._dynobji
                //      me._init(e.type,e,src._dynobji);
                //      if (e.type=='mousedown') me.defaultValue = false;
                //      me._invoke();
                //}
                // else 
                if (src._dynobj) {  // src._dynobj == 
dynlayer.doc._dynobj,dynlayer.doc.images[x]._dynobj,dynlayer.doc.links[x]._dynobj
                        me._init(e.type,e,src._dynobj);
                        me._invoke();
                }
                else {  // dynobj == dynlayer.elm._dynobj
                        me._init(e.type,e,dynobj);
                        me._invoke();
                }
                me._wasHandled = true;
        }

        dynobj = (src._dynobj)? src._dynobj:dynobj;

        // prevent image dragging
        if (e.type=='mousedown' && (e.target+'')=='[object Image]') {
                me.defaultValue=false;
        }
                
        // disable text select
        if (e.type=='mousedown' && dynobj._textSelectable==false) {
                // ns4 will disable hyperlinks. this is my workaround
                me.defaultValue =(e.target.href)? null:false;
        }
        
        return me.defaultValue;
};

DynElement.prototype.captureMouseEvents = function() {
        this._hasMouseEvents = true;
        var elm = this.elm;
        if (elm) {
                elm.captureEvents(Event.MOUSEDOWN | Event.MOUSEUP | Event.DBLCLICK);
                elm.onmousedown = elm.onmouseup = elm.ondblclick = 
MouseEvent._eventHandler;
                
                if (this.getClassName()=='DynDocument') {  // move/over/out events are 
generated from the document
                        this.doc.captureEvents(Event.MOUSEMOVE);
                        elm.onmousemove = MouseEvent._docMoveHandler;
                }
                elm._dynobj = this;
                this.doc._dynobj = this;
                for (var i=0;i<this.doc.images.length;i++) 
this.doc.images[i]._dynobj=this; // was _dynobji
                for (var i=0;i<this.doc.links.length;i++) 
this.doc.links[i]._dynobj=this;
        }
};

DynElement.prototype.releaseMouseEvents = function() {
        this._hasMouseEvents = false;
        var elm = this.elm;
        if (elm) {
                elm.releaseEvents(Event.MOUSEDOWN | Event.MOUSEUP | Event.DBLCLICK);
                elm.onmousedown = elm.onmouseup = elm.ondblclick = null;
                
                if (this.getClassName()=='DynDocument') {
                        elm.releaseEvents(Event.MOUSEMOVE);
                        elm.onmousemove = null;
                }
                elm._dynobj = null;
                this.doc._dynobj = null;
                for (var i=0;i<this.doc.images.length;i++) 
this.doc.images[i]._dynobji=null;
                for (var i=0;i<this.doc.links.length;i++) 
this.doc.links[i]._dynobj=null;
        }
};
\ No newline at end of file



-------------------------------------------------------
This SF.net email is sponsored by: ValueWeb: 
Dedicated Hosting for just $79/mo with 500 GB of bandwidth! 
No other company gives more support or power for your dedicated server
http://click.atdmt.com/AFF/go/sdnxxaff00300020aff/direct/01/
_______________________________________________
Dynapi-CVS mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dynapi-cvs

Reply via email to