From: Robert R. <rai...@us...> - 2002-01-11 20:51:58
|
Update of /cvsroot/dynapi/dynapi2x/src/dynapi/api/ext In directory usw-pr-cvs1:/tmp/cvs-serv15575/src/dynapi/api/ext Added Files: dragevent.js dynkeyevent.js dynlayer_inline.js Log Message: Initial Import == 2.9 --- NEW FILE --- /* DynAPI Distribution DragEvent Class The DynAPI Distribution is distributed under the terms of the GNU LGPL license. */ // DragEvent object function DragEvent(type,src) { this.inherit('DynEvent'); this.DynEvent() this.isDragging = false; } dynapi.setPrototype('DragEvent','DynEvent'); DragEvent.prototype.getX=function() {return this.x;}; DragEvent.prototype.getY=function() {return this.y;}; DragEvent.prototype.getPageX=function() {return this.pageX;}; DragEvent.prototype.getPageY=function() {return this.pageY;}; DragEvent.prototype.cancelDrag=function() {this.isDragging=false;}; DragEvent.dragPlay=0; DragEvent.dragevent=new DragEvent(); DragEvent.lyrListener = { onmousedown : function(e) { e.preventDefault(); DragEvent.startDrag(e); } }; DragEvent.startDrag = function(e) { var lyr = e.getSource(); if (DynAPI.ua.dom) { lyr.elm.ondragstart = function() { return false; } lyr.elm.onselectstart = function() { return false; } } // Initialize dragEvent object var de=DragEvent.dragevent; de.type="dragstart"; de.src=lyr; de.origin=e.origin; // Set properties de.isDragging=false; de.x=e.getPageX()-e.getSource().getPageX(); de.y=e.getPageY()-e.getSource().getPageY(); de.pageX=e.getPageX(); de.pageY=e.getPageY(); de.parentPageX=lyr.parent.getPageX(); de.parentPageY=lyr.parent.getPageY(); de.isDragging=true; lyr.invokeEvent("dragstart",de); } DragEvent.docListener = { onmousemove : function(e) { // Get, if any, the currently drag in process and the layer. If none, return var de = DragEvent.dragevent; if (!de || !de.isDragging) return; var lyr = de.src; if (!lyr) return; // DS: what is this? // Detect if we should start the drag /*if(DragEvent.dragPlay==0 || (Math.abs(de.pageX-e.getPageX())-DragEvent.dragPlay>0) || (Math.abs(de.pageY-e.getPageY())-DragEvent.dragPlay>0)) { de.isDragging=true; de.src.invokeEvent("dragstart",de); e.setBubble(de.bubble); } */ /*else if (!de.dragEnabled) { // This allows 'cancelDrag' method to fire the mouseUp as if had been released by the user lyr.invokeEvent("mouseup"); return; }*/ // Properties de.type="dragmove"; de.pageX=e.getPageX(); de.pageY=e.getPageY(); if (DragEvent.stopAtDocumentEdge) { if (de.pageX<0) de.pageX = 0; if (de.pageY<0) de.pageY = 0; if (de.pageX>DynAPI.document.w) de.pageX = DynAPI.document.w; if (de.pageY>DynAPI.document.h) de.pageY = DynAPI.document.h; } var x=de.pageX-de.parentPageX-de.x; var y=de.pageY-de.parentPageY-de.y; // Respect boundary, if any if (lyr._dragBoundary) { var dB = lyr._dragBoundary; var t = dB.top; var r = dB.right; var b = dB.bottom; var l = dB.left if (x<l) x = l; else if (x>lyr.parent.w-lyr.w-r) x = lyr.parent.w-lyr.w-r; if (y<t) y = t; else if (y>lyr.parent.h-lyr.h-b) y = lyr.parent.h-lyr.h-b; } else if (lyr._dragBoundaryA) { var dB = lyr._dragBoundaryA; var b=dB[2]; var r=dB[1]; var l=dB[3]; var t=dB[0]; var w=lyr.w; var h=lyr.h; if (x<l) x=l; else if (x+w>r) x=r-w; if (y<t) y=t; else if (y+h>b) y=b-h; } // Move dragged layer lyr.setLocation(x,y); lyr.invokeEvent("dragmove",de); e.preventDefault(); e.preventBubble(); }, onmouseup : function(e) { // Get, if any, the currently drag in process and the layer. If none, return var de=DragEvent.dragevent; if (!de) return; var lyr=de.src; if (!lyr) return; if (!de.isDragging) { de.type="dragend"; de.src=null; //e.setBubble(true); return; } if (DynAPI.ua.ie) lyr.doc.body.onselectstart = null; // Avoid click for the dragged layer ( with MouseEvent addition ) if (DynAPI.ua.def) DynAPI.wasDragging=true; if (lyr.parent.DragDrop) lyr.parent.DragDrop(lyr); // Properties for the event de.type="dragend"; de.isDragging=false; lyr.invokeEvent("dragend",de); // Clean drag stuff de.src=null; //e.preventDefault(); e.preventBubble(); } }; DragEvent.stopAtDocumentEdge = true; DragEvent.setDragBoundary=function(lyr,t,r,b,l) { if (!lyr) {DynAPI.debug.print("Error: no object passed to DragEvent.setDragBoundary()"); return;} var a=arguments; if (a.length==0) return; if (a.length==1) { lyr._dragBoundary = {left:0,right:0,top:0,bottom:0}; } if (a.length==2) { lyr._dragBoundary = arguments[1]; } else if (a.length==5) lyr._dragBoundaryA = [t,r,b,l]; }; DragEvent.enableDragEvents=function(f) { for (var i=0;i<arguments.length;i++) { var lyr=arguments[i]; if (!lyr) {DynAPI.debug.print("Error: no object passed to DragEvent.enableDragEvents()"); return;} if (lyr.isClass('DynLayer')) lyr.addEventListener(DragEvent.lyrListener); } DynAPI.document.addEventListener(DragEvent.docListener); }; DragEvent.disableDragEvents=function() { for (var i=0;i<arguments.length;i++) { var lyr=arguments[i]; lyr.removeEventListener(DragEvent.lyrListener); } }; /* DynObject.prototype.DragDrop=function(s){ if (!this.children.length>0) return false; var ch,chX,sX,sY; for (var i in this.children) { ch=this.children[i]; chX=ch.getPageX(); chY=ch.getPageY(); sX=s.getPageX(); sY=s.getPageY(); if (chX<sX && chX+ch.w>sX+s.w && chY<sY && chY+ch.h>sY+s.h) { if (ch.DragDrop(s)) return true; ch.invokeEvent("drop"); return true; } } return false; }; */ --- NEW FILE --- /* DynAPI Distribution Key Event Extensions by Henrik Våglin (hv...@ya...) The DynAPI Distribution is distributed under the terms of the GNU LGPL license. Requirements: dynapi.api [dynlayer, dyndocument, browser] dynapi.event [listeners] */ function DynKeyEvent() { this.inherit('DynEvent'); }; var p = dynapi.setPrototype('DynKeyEvent','DynEvent'); DynKeyEvent.prototype.getKey=function() { return this.charKey }; DynKeyEvent.prototype.bubbleEvent=function() { if (!this.bubble||this.src.isDynDocument||this.src.parent==null) return; this.src=this.src.parent; this.src.invokeEvent(this.type,this); this.bubbleEvent(); return; }; DynKeyEvent.EventMethod = function(e) { var dynobject=this.lyrobj; if(is.def) { if (is.ie) var e=dynobject.frame.event; else if (e.eventPhase!=3) return false; e.cancelBubble=true; } if(is.def) var realsrc = Methods.getContainerLayerOf(is.ie?e.srcElement:e.target)||dynobject; else if(is.ns4) var realsrc=e.target.lyrobj; if (!realsrc) return false; var evt=DynKeyEvent._e evt.type=e.type evt.src=realsrc; evt.browserReturn=true; evt.bubble=true; evt.which=(is.ns4)?e.which:e.keyCode; var curKey = String.fromCharCode(evt.which).toLowerCase(); if (((curKey>='a')&&(curKey<='z'))||((curKey>='0')&&(curKey<='9'))) evt.charKey=curKey; else evt.charKey=null; evt.ctrlKey=(is.ns4)?(e.modifiers & Event.CONTROL_MASK):(e.ctrlKey||e.ctrlLeft||e.keyCode==17); evt.shiftKey=(is.ns4)?(e.modifiers & Event.SHIFT_MASK):(e.shiftKey||e.shiftLeft||e.keyCode==16); evt.orig=e; realsrc.invokeEvent(evt.type,evt); evt.bubbleEvent(); return evt.browserReturn; }; DynKeyEvent._e=new DynKeyEvent(); DynDocument.prototype.captureKeyEvents=function() { if(is.def&&!is.ie) { this.doc.addEventListener("keydown",DynKeyEvent.EventMethod,false) this.doc.addEventListener("keyup",DynKeyEvent.EventMethod,false) this.doc.addEventListener("keypress",DynKeyEvent.EventMethod,false) } else { if (is.ns4) this.doc.captureEvents(Event.KEYPRESS | Event.KEYDOWN | Event.KEYUP); this.doc.onkeypress=this.doc.onkeydown=this.doc.onkeyup=DynKeyEvent.EventMethod } } DynDocument.prototype.releaseKeyEvents=function() { if(is.def&&!is.ie) { this.doc.removeEventListener("keydown",DynKeyEvent.EventMethod,false) this.doc.removeEventListener("keyup",DynKeyEvent.EventMethod,false) this.doc.removeEventListener("keypress",DynKeyEvent.EventMethod,false) } else { if (is.ns4) this.doc.releaseEvents(Event.KEYPRESS | Event.KEYDOWN | Event.KEYUP); this.doc.onkeypress=this.doc.onkeydown=this.doc.onkeyup=null } } DynLayer.prototype.captureKeyEvents=function() { if(!this.elm) return if(is.def&&!is.ie) { this.elm.addEventListener("keydown",DynKeyEvent.EventMethod,false) this.elm.addEventListener("keyup",DynKeyEvent.EventMethod,false) this.elm.addEventListener("keypress",DynKeyEvent.EventMethod,false) } else { if (is.ns4) this.elm.captureEvents(Event.KEYPRESS | Event.KEYDOWN | Event.KEYUP); this.elm.onkeypress=this.elm.onkeydown=this.elm.onkeyup=DynKeyEvent.EventMethod } } DynLayer.prototype.releaseKeyEvents=function() { if(!this.elm) return if(is.def&&!is.ie) { this.elm.removeEventListener("keydown",DynKeyEvent.EventMethod,false) this.elm.removeEventListener("keyup",DynKeyEvent.EventMethod,false) this.elm.removeEventListener("keypress",DynKeyEvent.EventMethod,false) } else { if (is.ns4) this.elm.releaseEvents(Event.KEYPRESS | Event.KEYDOWN | Event.KEYUP); this.elm.onkeypress=this.elm.onkeydown=this.elm.onkeyup=null } } /* Overwrite methods to support key events. */ DynObject.prototype.assignKeyEvents = function() { if (this.hasEventListeners) this.captureKeyEvents() var l=this.children.length; for (var i=0; i<l; i++) this.children[i].assignKeyEvents() } DynObject.prototype._OldK_addEventListener = DynObject.prototype.addEventListener DynObject.prototype.addEventListener = function(l) { var r = this._OldK_addEventListener(l) if(this.hasEventListeners && this.created) this.captureKeyEvents() return r } DynObject.prototype._OldK_removeEventListener = DynObject.prototype.removeEventListener DynObject.prototype.removeEventListener = function(l) { var r = this._OldK_removeEventListener(l) if(!this.hasEventListeners) this.releaseKeyEvents() return r } DynObject.prototype._OldK_removeAllEventListeners = DynObject.prototype.removeAllEventListeners DynObject.prototype.removeAllEventListeners = function() { var r = this._OldK_removeAllEventListeners() this.releaseKeyEvents() return r } // DynLayer Specific DynLayer.prototype._OldK_specificCreate = DynLayer.prototype.specificCreate DynLayer.prototype.specificCreate = function() { this._OldK_specificCreate() this.assignKeyEvents() } // DynDocument specific DynDocument.prototype._OldK_specificCreate = DynDocument.prototype.specificCreate DynDocument.prototype.specificCreate = function() { this._OldK_specificCreate() this.assignKeyEvents() } --- NEW FILE --- // DS: this code needs to be updated /* DynObject.prototype.findLayers=function() { var divs=[]; if (is.def&&!is.ie) divs=this.doc.getElementsByTagName("DIV"); else if (is.ie) divs=this.doc.all.tags("DIV"); else if (is.ns4) divs=this.doc.layers; else return; for (var i=0; i<divs.length; i++) { if(Methods.isDirectChildOf(divs[i],this.elm)) { var id=is.ns4? divs[i].name : divs[i].id; var dlyr=new DynLayer(id); dlyr.parent=this; dlyr.created=true; dlyr.isChild=true; dlyr.elm=divs[i]; if (is.def) { dlyr.css=dlyr.elm.style; dlyr.doc=this.doc } else if (is.ns4) { dlyr.css=dlyr.elm; dlyr.doc=dlyr.elm.document; } dlyr.frame=this.frame; //Event stuff dlyr.elm.lyrobj=dlyr.doc.lyrobj=dlyr; if(is.ns4) { for (var j in dlyr.doc.images) dlyr.doc.images[j].lyrobj=dlyr; for (j=0;j<dlyr.doc.links.length;j++) dlyr.doc.links[j].lyrobj=dlyr; } // DynObject.all[dlyr.id]=dlyr; // JM: Constructors take care of this this.children[this.children.length]=dlyr; dlyr.updateValues(); dlyr.findLayers(); } } }; DynLayer.prototype.updateValues=function() { if (is.def) { this.x=this.elm.offsetLeft; this.y=this.elm.offsetTop; this.w=is.ie4? this.css.pixelWidth||this.getContentWidth() : this.elm.offsetWidth; this.h=is.ie4? this.css.pixelHeight||this.getContentHeight() : this.elm.offsetHeight; this.bgImage = this.css.backgroundImage; this.bgColor = this.css.backgroundColor; this.html = this.innerHTML = this.elm.innerHTML; } else if (is.ns4) { this.x=parseInt(this.css.left); this.y=parseInt(this.css.top); this.w=this.css.clip.width; this.h=this.css.clip.height; this.clip=[this.css.clip.top,this.css.clip.right,this.css.clip.bottom,this.css.clip.left]; this.bgColor=this.doc.bgColor!="this.doc.bgColor"?this.doc.bgColor:null; this.bgImage=this.elm.background.src!=""?this.elm.background.src:null; this.html=this.innerHTML = this.elm.innerHTML = ""; } this.z=this.css.zIndex; var b=this.css.visibility; this.visible=(b=="inherit"||b=="show"||b=="visible"||b==""); }; Methods.isDirectChildOf = function(l, parent) { if(is.def&&!is.ie) { for(var p=l.parentNode;p;p=p.parentNode) if(p.nodeName.toLowerCase()=='div') return p==parent; return !parent.nodeName; } else if (is.ie) { for(var p=l.parentElement;p;p=p.parentElement) if(p.tagName.toLowerCase()=='div') return p==parent; return !parent.tagName; } else if(is.ns4) return (l.parentLayer == parent); }; DynDocument.prototype._OldI_specificCreate = DynDocument.prototype.specificCreate DynDocument.prototype.specificCreate = function() { this._OldI_specificCreate() this.findLayers() } */ |