From: Richard B. <ma...@ri...> - 2001-01-23 12:18:13
|
Hi, I tested it a little, and found that events do not work for inline layers in NS6 Cheers, Richard Bennett ma...@ri... www.richardinfo.com (Everything running on, and ported to the 19/12/2000 snapshot of DynAPI2) ----- Original Message ----- From: "labCoat" <la...@xe...> To: <dyn...@li...> Sent: Tuesday, January 23, 2001 9:12 AM Subject: [Dynapi-Dev] NS6 events and contentWH > Hello all! > > I recently revised the latest (CVS) version of events.js, and have events working properly in IE5, IE55, NS4, and NS6 (I don't have IE4, but I am almost positive that it will work in it). > > It would be great if anyone would like to plug this into their version of the API and take it for a test drive! (Also, I would appriciate any feedback!) > > Now, I made A LOT of modifications/optimizations, and I haven't commented everything, so please don't get angry for the lack of comments... ;-) > > Here goes... > > <!--// > > /* > DynAPI Distribution > Event Classes > Modified: 2001.01.23 > > The DynAPI Distribution is distributed under the terms of the GNU LGPL license. > */ > > /*---------------------------------------------------------------------- > -- CLASS: DynEvent > -- ARGUMENTS: type,src,target > -- METHODS: getType(), getSource(), getTarget() > ----------------------------------------------------------------------*/ > DynEvent=function(type,src,target) { > this.type=type; > this.src=src; > this.target=target; > }; > DynEvent.prototype.getType=function() { > return this.type; > }; > DynEvent.prototype.getSource=function() { > return this.src; > }; > DynEvent.prototype.getTarget=function() { > return this.target; > }; > > > /*---------------------------------------------------------------------- > -- CLASS: EventListener > -- ARGUMENTS: target > -- METHODS: handleEvent() > ----------------------------------------------------------------------*/ > EventListener=function(target) { > this.target=target; > } > EventListener.prototype.handleEvent=function(type,e) { > if ((e.button==2 || e.button==3) && (type=='mousedown' || type=='mouseup' || type=='click' || type=='dblclick')) { > if (e.button==2) type='md'+type; > if (e.button==3) type='rt'+type; > e.type=type; //ADDED:proteanman > } > if (this["on"+type]) { > if (is.ns5) { > var mse=(type.match(/mouse/) || type.match(/click/)); > if (!mse || (!isNaN(e.eventPhase) && ((e.src.isDynLayer && (e.eventPhase==1 || e.eventPhase==2)) || (e.src.isDynDocument && e.eventPhase==3)))) this["on"+type](e); > } else this["on"+type](e); > } > }; > > /*---------------------------------------------------------------------- > -- CLASS: MouseEvent > -- ARGUMENTS: none > -- METHODS: getType(), getSource(), getTarget(), setEvent(), > bubbleEvent(), getX(), getY(), getPageX(), getPageY(), > setBubble(), cancelBrowserEvent() > ----------------------------------------------------------------------*/ > MouseEvent=function() {}; > MouseEvent.prototype.getType=function() { > return this.type; > }; > MouseEvent.prototype.getSource=function() { > return this.src; > }; > MouseEvent.prototype.getTarget=function() { > return this.target; > }; > MouseEvent.prototype.setEvent=function(src,e) { > this.orig=e; > this.browserReturn=true; > this.bubble=true; > this.src=src; > this.type=e.type; > > if (is.ie) { > //Set event's mouse's x/y & pageX/pageY coords > this.pageX=e.x+document.body.scrollLeft; > this.pageY=e.y+document.body.scrollTop; > this.x=e.offsetX; > this.y=e.offsetY; > > //Set event mouse button > var b=e.button; > if (b==2) b=3; > else if (b==4) b=2; > this.button=b; > > //Set mouse event's modifiers > this.altKey=(e.altKey || e.altLeft); > this.ctrlKey=(e.ctrlKey || e.ctrlLeft); > this.shiftKey=(e.shiftKey || e.shiftLeft); > } else { > //ADDED: proteanman -- adds events eventphase property for ns5 > if (is.ns5) this.eventPhase=e.eventPhase; > > //Set event's mouse's x/y & pageX/pageY coords > this.pageX=e.pageX-window.pageXOffset; > this.pageY=e.pageY-window.pageYOffset; > this.x=e.layerX; > this.y=e.layerY; > > //Set event mouse button > this.button=e.which; > > //Set mouse event's modifiers > var m=e.modifiers; > this.altKey=(m==1 || m==3 || m==5 || m==7); > this.ctrlKey=(m==2 || m==3 || m==6 || m==7); > this.shiftKey=(m==4 || m==5 || m==6 || m==7); > } > }; > MouseEvent.prototype.bubbleEvent=function() { > if (!this.bubble || this.src.isDynDocument || this.src.parent==null) return; > this.x+=this.src.x; > this.y+=this.src.y; > this.src=this.src.parent; > this.src.invokeEvent(this.type,this); > this.bubbleEvent(); > return; > }; > MouseEvent.prototype.getX=function() { > return this.x; > }; > MouseEvent.prototype.getY=function() { > return this.y; > }; > MouseEvent.prototype.getPageX=function() { > return this.pageX; > }; > MouseEvent.prototype.getPageY=function() { > return this.pageY; > }; > MouseEvent.prototype.setBubble=function(b) { > this.bubble=b; > }; > MouseEvent.prototype.cancelBrowserEvent=function(b) { > this.browserReturn=false; > }; > > /*---------------------------------------------------------------------- > -- DynLayer Event Methods > ----------------------------------------------------------------------*/ > DynLayer.prototype.captureMouseEvents=function() { > if (this.isDynDocument && this.mouseEventsCaptured) return; > this.mouseEventsCaptured=true; > > if (!this.eventListeners) this.eventListeners=[]; > this.hasEventListeners=true; > > if (this.isDynLayer && (!this.created || !this.elm)) return; > > var o=(this.isDynDocument)?this.doc:this.elm; > > if (is.ns4) { > if (this.isDynLayer) o.captureEvents(Event.MOUSEOVER | Event.MOUSEMOVE | Event.MOUSEDOWN | Event.MOUSEUP | Event.CLICK | Event.DBLCLICK | Event.MOUSEOUT); > else if (this.isDynDocument) o.captureEvents(Event.MOUSEMOVE | Event.MOUSEDOWN | Event.MOUSEUP | Event.CLICK | Event.DBLCLICK); > } else if (is.ie) { > o.oncontextmenu=function() { > return false; > }; > } > > if (is.ns5) { > if (this.isDynLayer) { > //true (bubble phase - from src to window): eventPhase = 1 to 2 > o.addEventListener("mouseover",DynLayer.prototype.EventMethod,true); > o.addEventListener("mousemove",DynLayer.prototype.EventMethod,true); > o.addEventListener("mousedown",DynLayer.prototype.EventMethod,true); > o.addEventListener("mouseup",DynLayer.prototype.EventMethod,true); > o.addEventListener("click",DynLayer.prototype.EventMethod,true); > o.addEventListener("dblclick",DynLayer.prototype.EventMethod,true); > o.addEventListener("mouseout",DynLayer.prototype.EventMethod,true); > } else if (this.isDynDocument) { > //false (capture phase - from window to src): eventPhase = 3 > o.addEventListener("mousemove",DynDocument.prototype.EventMethod,false); > o.addEventListener("mousedown",DynDocument.prototype.EventMethod,false); > o.addEventListener("mouseup",DynDocument.prototype.EventMethod,false); > o.addEventListener("click",DynDocument.prototype.EventMethod,false); > o.addEventListener("dblclick",DynDocument.prototype.EventMethod,false); > } > } else { > if (this.isDynLayer) o.onmouseover=o.onmousemove=o.onmousedown=o.onmouseup=o.onclick=o.ondblclick =o.onmouseout=DynLayer.prototype.EventMethod; > else if (this.isDynDocument) o.onmousemove=o.onmousedown=o.onmouseup=o.onclick=o.ondblclick=DynDocument.p rototype.EventMethod; > } > }; > DynLayer.prototype.releaseMouseEvents=function() { > this.mouseEventsCaptured=false; > if (this.isDynLayer) { > var o=this.elm; > o.onmouseover=o.onmousemove=o.onmousedown=o.onmouseup=o.onclick=o.ondblclick =o.onmouseout=function(e) { > return false; > }; > } else if (this.isDynDocument) { > var o=this.doc; > o.onmousemove=o.onmousedown=o.onmouseup=o.onclick=o.ondblclick=function(e) { > return false; > }; > } > }; > DynLayer.prototype.EventMethod=function(e) { > var dyndoc=this.lyrobj.dyndoc; > if (is.ie) { > var e=dyndoc.elm.event; > e.cancelBubble=true; > if (e.type=="click" && DynAPI.wasDragging) { > DynAPI.wasDragging=false; > return true; > } > if ((e.type=="mouseout" && this.contains(e.toElement)) || (e.type=="mouseover" && this.contains(e.fromElement))) return true; > } > > var realsrc=(is.ie)?e.srcElement:(is.ns5)?e.currentTarget:e.target;//var realsrc=(is.ie)?e.srcElement:e.target; > > if (is.ie) while (!realsrc.lyrobj && realsrc.parentElement && realsrc.parentElement!=realsrc) realsrc=realsrc.parentElement;//for (; is.ie && !realsrc.lyrobj && realsrc.parentElement && realsrc.parentElement!=realsrc; realsrc=realsrc.parentElement); > else if (is.ns5) while (!realsrc.lyrobj && realsrc.parentNode && realsrc.parentNode!=realsrc) realsrc=realsrc.parentNode; > > var src=realsrc.lyrobj||dyndoc; > if (!src) return true; > var evt=dyndoc._e; > evt.setEvent(src,e); > var type=evt.type; > src.invokeEvent(type,evt); > > if (!this.isDynDocument && is.ns && (e.type=="mouseover" || e.type=="mouseout")) return false; > > evt.bubbleEvent(); > > //returns false after double-click, so that the click event doesn't happen again (it happens before) after the double-click -- works all but ns5 > if (type.match(/dblclick/)) return false; > > //checks for mousedown so that clicks will get fired in ns4 > else if (is.ns4 && evt.button!=3 && type.match(/mousedown/)) return true; > > //checks if there is a right-mousedown(ns4) || right-mouseup(ns5) and prevents the right-mouse menu from popping up > else if ((is.ns4 && evt.button==3 && type.match(/mousedown/)) || (is.ns5 && evt.button==3 && type.match(/mouseup/))) return false; > else return evt.browserReturn; > }; > DynLayer.prototype.addEventListener=function(listener) { > if (!this.hasEventListeners) this.captureMouseEvents(); > for (var i in this.eventListeners) { > if (this.eventListeners[i]==listener) return; > } > this.eventListeners[this.eventListeners.length]=listener; > }; > DynLayer.prototype.removeEventListener=function(listener) { > DynAPI.removeFromArray(this.eventListeners, listener, false); > }; > DynLayer.prototype.removeAllEventListeners=function() { > if (!this.hasEventListeners) return; > for (var i in this.eventListeners) delete this.eventListeners[i]; > this.eventListeners=[]; > this.hasEventListeners=false; > }; > DynLayer.prototype.invokeEvent=function(type,e) { > if (!this.hasEventListeners) return; > > if (is.ie && this.isDynLayer && ((type=='mouseover' && this.elm.contains(e.orig.fromElement)) || (type=='mouseout' && this.elm.contains(e.orig.toElement)))) return; > > var orig=null; > if (is.ns && e) { > orig=e.orig; > e.cancelBubble=false; > } > if (is.ns4 && is.platform=='other' && type.match(/mousedown/)) { > if (this.dbltimer!=null) { > type="dblclick"; > if (e) e.type=type; > } else this.dbltimer=setTimeout(this+'.dbltimer=null',300); > } > for (var i=0; i<this.eventListeners.length; i++) { > if (e) e.target=this.eventListeners[i].target; > else { > e=new DynEvent(type,this); > e.target=this.eventListeners[i].target; > if (is.ns) e.cancelBubble=false; > } > this.eventListeners[i].handleEvent(type,e); > } > > if (is.ns && ((this.isDynLayer && e) || (this.isDynDocument && (e || i!=0)))) { > if (e.cancelBubble) return; > if (orig && orig.target.handleEvent) { > if (this.isDynLayer && orig.target!=this.elm) orig.target.handleEvent(type,orig); > else if (this.isDynDocument && !orig.target.URL) orig.target.handleEvent(orig); > } > } > if (is.ns4 && is.platform=='other' && type=='mouseup') this.invokeEvent('click',e); > if (this.isDynLayer && this.parentComponent) { > if (e) e.src=this.parentComponent; > else e=new DynEvent(type,this); > this.parentComponent.invokeEvent(type,e); > } > }; > > /*---------------------------------------------------------------------- > -- DynDocument Event Methods > ----------------------------------------------------------------------*/ > DynDocument.prototype._e=new MouseEvent(); > DynDocument.prototype.captureMouseEvents=DynLayer.prototype.captureMouseEven ts; > DynDocument.prototype.releaseMouseEvents=DynLayer.prototype.releaseMouseEven ts; > DynDocument.prototype.EventMethod=DynLayer.prototype.EventMethod; > DynDocument.prototype.addEventListener=DynLayer.prototype.addEventListener; > DynDocument.prototype.removeEventListener=DynLayer.prototype.removeEventList ener; > DynDocument.prototype.removeAllEventListeners=DynLayer.prototype.removeAllEv entListeners; > DynDocument.prototype.invokeEvent=DynLayer.prototype.invokeEvent; > > //--> > > I have also made A LOT of modifications to dynlayer.js, which fixes some of the existing problems, including tge contentW/H (specifically in NS4 and NS6, in the createElement). But it is still undergoing evtensive testing. > > I need to set up CVS on my computer, so that I can make these updates soon. > > --proteanman > > On Mon, 22 January 2001, ni...@pr... wrote: > > > > > I tried your patch and still doubleclick on ns 6 doesn't work > > ciao > > Y > > On Mon, 22 January 2001, no...@so... wrote: > > > > > > > > Patch #103359 has been updated. > > > > > > Project: dynapi > > > Category: DynAPI-Event > > > Status: Open > > > Submitted by: camhart > > > Assigned to : nobody > > > Summary: NS6 event fixes > > > > > > Follow-Ups: > > > > > > Date: 2001-Jan-22 19:55 > > > By: nobody > > > > > > Comment: > > > Tested and working > > > Richard Bennett > > > ------------------------------------------------------- > > > > > > ------------------------------------------------------- > > > For more info, visit: > > > > > > http://sourceforge.net/patch/?func=detailpatch&patch_id=103359&group_id=5757 > > > > > > _______________________________________________ > > > Dynapi-Dev mailing list > > > Dyn...@li... > > > http://lists.sourceforge.net/lists/listinfo/dynapi-dev > > > > > > > > _______________________________________________ > > Dynapi-Dev mailing list > > Dyn...@li... > > http://lists.sourceforge.net/lists/listinfo/dynapi-dev > > _______________________________________________ > Dynapi-Dev mailing list > Dyn...@li... > http://lists.sourceforge.net/lists/listinfo/dynapi-dev > ____________________________________________________________ > Get your free domain name and domain-based e-mail from > Namezero.com. New! Namezero Plus domains now available. > Find out more at: http://www.namezero.com > |