|
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()
}
*/
|