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

Modified Files:
        dynkeyevent.js 
Log Message:
uploaded by raymond - includes kevin's patches

Index: dynkeyevent.js
===================================================================
RCS file: /cvsroot/dynapi/dynapi3x/src/api/ext/dynkeyevent.js,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -r1.1.1.1 -r1.2
*** dynkeyevent.js      10 Feb 2003 22:35:54 -0000      1.1.1.1
--- dynkeyevent.js      30 Mar 2003 17:13:21 -0000      1.2
***************
*** 1 ****
! /*
   DynAPI Distribution
   Key Event Extensions by Henrik V�glin ([EMAIL PROTECTED])

   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.DynEvent = DynEvent;
        this.DynEvent();
};
var p = dynapi.setPrototype('DynKeyEvent','DynEvent');
p.getKey=function() {
        return this.charKey;
};
p.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._dynobj;
        if (!dynobject) return true;
        dynobject = dynobject._dyndoc;
        if (!dynobject) return true;
        if(dynapi.ua.def) {
                if (dynapi.ua.ie) var e=dynobject.frame.event;
                else if (e.eventPhase!=3) return false;
        e.cancelBubble=true;
        }
        if(dynapi.ua.def) var realsrc = 
MouseEvent._getContainerLayerOf(dynapi.ua.ie?e.srcElement:e.target)||dynobject;
        else if(dynapi.ua.ns4) var realsrc=e.target._dynobj;
        if (!realsrc) return false;
        var evt=DynKeyEvent._e
        evt.type=e.type
        evt.src=realsrc;
        evt.browserReturn=true;
        evt.bubble=true;
        evt.which=(dynapi.ua.ns4)?e.which:e.keyCode;
        var curKey = String.fromCharCode(evt.which).toLowerCase();
        if (((curKey>='a')&&(curKey<='z'))||((curKey>='0')&&(curKey<='9'))) 
evt.charKey=curKey;
        evt.altKey=(dynapi.ua.ns4)? 
false:(e.altKey||e.altLeft||e.keyCode==18||e.keyCode==57388);
        evt.ctrlKey=(dynapi.ua.ns4)?(e.modifiers & 
Event.CONTROL_MASK):(e.ctrlKey||e.ctrlLeft||e.keyCode==17||e.keyCode==57391);
        evt.shiftKey=(dynapi.ua.ns4)?(e.modifiers & 
Event.SHIFT_MASK):(e.shiftKey||e.shiftLeft||e.keyCode==16||e.keyCode==57390);
        evt.orig=e;
        realsrc.invokeEvent(evt.type,evt);
        evt.bubbleEvent();
        return evt.browserReturn;
};
DynKeyEvent._e=new DynKeyEvent();
DynDocument.prototype.captureKeyEvents=function() {
        if(dynapi.ua.def && !dynapi.ua.ie) {
                this.doc.addEventListener("keydown",DynKeyEvent.EventMethod,false);
                this.doc.addEventListener("keyup",DynKeyEvent.EventMethod,false);
                this.doc.addEventListener("keypress",DynKeyEvent.EventMethod,false);
        }
        else {
                if (dynapi.ua.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(dynapi.ua.def&&!dynapi.ua.ie) {
                this.doc.removeEventListener("keydown",DynKeyEvent.EventMethod,false);
                this.doc.removeEventListener("keyup",DynKeyEvent.EventMethod,false);
                this.doc.removeEventListener("keypress",DynKeyEvent.EventMethod,false);
        }
        else {
                if (dynapi.ua.ns4) this.doc.releaseEvents(Event.KEYPRESS | 
Event.KEYDOWN | Event.KEYUP);
                this.doc.onkeypress=this.doc.onkeydown=this.doc.onkeyup=null;
        }
};
DynDocument.prototype.captureHotKey = function(key,fn){
        var klst=((key+'').toLowerCase()).split('+');
        klst.sort();
        key=klst.join('+');
        if(!this._hotKeys){
                this._hotKeys={};
                this._keyDn={};
                this._keyLst='';
                this.captureKeyEvents();
                this.addEventListener({
                        onkeydown:function(e){
                                var k = e.which;
                                var o = e.getSource();  
                                // to-do: add opera v7 key code (57xxx), e.g 57388
                                if (k==13) k="enter";
                                else if(k==27) k="esc";
                                else if(k==45) k="inert";
                                else if(k==46) k="delete";
                                else if(k==36) k="home";
                                else if(k==35) k="end";
                                else if(k==33) k="pgup";
                                else if(k==34) k="pgdn";
                                else if(k==38) k="up";
                                else if(k==40) k="down";
                                else if(k==37) k="left";
                                else if(k==39) k="right";                              
 
                                else if(e.altKey && !o._keyDn['alt']) k="alt";
                                else if(e.ctrlKey && !o._keyDn['ctrl']) k="ctrl";
                                else if(e.shiftKey && !o._keyDn['shift']) k="shift";
                                else k=(String.fromCharCode(k)).toLowerCase();
                                if(!o._keyDn[k]) {
                                        // store new key in keyDn array
                                        o._keyLst+=(((o._keyLst)? '+':'')+k); // build 
key list
                                        var ar=o._keyLst.split('+');
                                        ar.sort();
                                        o._keyLst=ar.join('+');
                                        o._keyDn[k]=true;
                                }
                                k=o._hotKeys[o._keyLst];
                                if(k){
                                        o._keyLst='';o._keyDn={};
                                        if(typeof(k)=='string') return eval(k); else 
return k();
                                }
                        },
                        onkeyup:function(e){
                                var o=e.getSource();    
                                o._keyLst='';o._keyDn={};
                        }
                });
        }
        this._hotKeys[key]=fn;
};
DynDocument.prototype.releaseHotKey = function(key){
        if(this._hotKeys) delete(this._hotKeys[key]);
};

DynLayer.prototype.captureKeyEvents=function() {
        if(!this.elm) return;
        if(dynapi.ua.def&&!dynapi.ua.ie) {
                this.elm.addEventListener("keydown",DynKeyEvent.EventMethod,false);
                this.elm.addEventListener("keyup",DynKeyEvent.EventMethod,false);
                this.elm.addEventListener("keypress",DynKeyEvent.EventMethod,false);
        }
        else {
                if (dynapi.ua.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(dynapi.ua.def&&!dynapi.ua.ie) {
                this.elm.removeEventListener("keydown",DynKeyEvent.EventMethod,false);
                this.elm.removeEventListener("keyup",DynKeyEvent.EventMethod,false);
                this.elm.removeEventListener("keypress",DynKeyEvent.EventMethod,false);
        }
        else {
                if (dynapi.ua.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._hasMouseEvents) 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._hasMouseEvents && 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._hasMouseEvents) this.releaseKeyEvents();
        return r;
};
DynObject.prototype._OldK_removeAllEventListeners = 
DynObject.prototype.removeAllEventListeners;
DynObject.prototype.removeAllEventListeners = function() {
        var r = this._OldK_removeAllEventListeners();
        this.releaseKeyEvents();
        return r;
};
\ No newline at end of file
--- 1 ----
! /*
   DynAPI Distribution
   Key Event Extensions by Henrik V�glin ([EMAIL PROTECTED])

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

   requires: Dynlayer
*/
function DynKeyEvent(type,src) {
        this.DynEvent = DynEvent;
        this.DynEvent(type,src);
        this.charKey=null;
        this.bubble=true;
};
var p = dynapi.setPrototype('DynKeyEvent','DynEvent');
p.getKey=function() {
        return this.charKey;
};
//p.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._getContainerLayerOf = function(element) {
        if (!element) return null;
        while (!element._dynobj && element.parentNode && element.parentNode!=element)
                element = element.parentNode;
        return element._dynobj;
};
//DynKeyEvent.EventMethod = function(e) {
DynKeyEvent._eventListener = function(e) {
        var dynobject=this._dynobj;
        if (!dynobject) return true;
//      dynobject = dynobject._dyndoc;
//      if (!dynobject) return true;
        var dyndoc = dynobject.doc._dynobj;
        if (!dyndoc) return true;
        if(dynapi.ua.def) {
//              if (dynapi.ua.ie) var e=dynobject.frame.event;
                if (dynapi.ua.ie) var e=dyndoc.frame.event;
                else if (e.eventPhase!=3) return false;
        e.cancelBubble=true;
        }
//      if(dynapi.ua.def) var realsrc = 
MouseEvent._getContainerLayerOf(dynapi.ua.ie?e.srcElement:e.target)||dynobject;
        if(dynapi.ua.def) var realsrc = 
DynKeyEvent._getContainerLayerOf(dynapi.ua.ie?e.srcElement:e.target)||dynobject;
        else if(dynapi.ua.ns4) var realsrc=e.target._dynobj;
        if (!realsrc) return false;
//      var evt=DynKeyEvent._e
//      evt.type=e.type
//      evt.src=realsrc;
//      evt.browserReturn=true;
//      evt.bubble=true;
        var evt=new DynKeyEvent(e.type,realsrc);
        evt.which=(dynapi.ua.ns4)?e.which:e.keyCode;
        var curKey = String.fromCharCode(evt.which).toLowerCase();
        if (((curKey>='a')&&(curKey<='z'))||((curKey>='0')&&(curKey<='9'))) 
evt.charKey=curKey;
        evt.altKey=(dynapi.ua.ns4)? 
false:(e.altKey||e.altLeft||e.keyCode==18||e.keyCode==57388);
        evt.ctrlKey=(dynapi.ua.ns4)?(e.modifiers & 
Event.CONTROL_MASK):(e.ctrlKey||e.ctrlLeft||e.keyCode==17||e.keyCode==57391);
        evt.shiftKey=(dynapi.ua.ns4)?(e.modifiers & 
Event.SHIFT_MASK):(e.shiftKey||e.shiftLeft||e.keyCode==16||e.keyCode==57390);
//      evt.orig=e;
        realsrc.invokeEvent(evt.type,evt);
//      evt.bubbleEvent();
//      return evt.browserReturn;
        return evt.defaultValue;
};
//DynKeyEvent._e=new DynKeyEvent();
//DynDocument.prototype.captureKeyEvents=function() {
DynElement.prototype.captureKeyEvents=function() {
        var elm=(this.getClassName()=='DynLayer')?this.elm:this.doc;
        if(!elm) return;
        this._hasKeyEvents=true;
        if(dynapi.ua.def && !dynapi.ua.ie) {
//              this.doc.addEventListener("keydown",DynKeyEvent.EventMethod,false);
//              this.doc.addEventListener("keyup",DynKeyEvent.EventMethod,false);
//              this.doc.addEventListener("keypress",DynKeyEvent.EventMethod,false);
                elm.addEventListener("keydown",DynKeyEvent._eventListener,false);
                elm.addEventListener("keyup",DynKeyEvent._eventListener,false);
                elm.addEventListener("keypress",DynKeyEvent._eventListener,false);
        }
        else {
//              if (dynapi.ua.ns4) this.doc.captureEvents(Event.KEYPRESS | 
Event.KEYDOWN | Event.KEYUP);
//              
this.doc.onkeypress=this.doc.onkeydown=this.doc.onkeyup=DynKeyEvent.EventMethod;
                if (dynapi.ua.ns4) elm.captureEvents(Event.KEYPRESS | Event.KEYDOWN | 
Event.KEYUP);
                elm.onkeypress=elm.onkeydown=elm.onkeyup=DynKeyEvent._eventListener;
        }
};
//DynDocument.prototype.releaseKeyEvents=function() {
DynElement.prototype.releaseKeyEvents=function() {
        var elm=(this.getClassName()=='DynLayer')?this.elm:this.doc;
        if(!elm) return;
        this._hasKeyEvents=false;
        if(dynapi.ua.def&&!dynapi.ua.ie) {
//              this.doc.removeEventListener("keydown",DynKeyEvent.EventMethod,false);
//              this.doc.removeEventListener("keyup",DynKeyEvent.EventMethod,false);
//              this.doc.removeEventListener("keypress",DynKeyEvent.EventMethod,false);
                elm.removeEventListener("keydown",DynKeyEvent._eventListener,false);
                elm.removeEventListener("keyup",DynKeyEvent._eventListener,false);
                elm.removeEventListener("keypress",DynKeyEvent._eventListener,false);
        }
        else {
//              if (dynapi.ua.ns4) this.doc.releaseEvents(Event.KEYPRESS | 
Event.KEYDOWN | Event.KEYUP);
//              this.doc.onkeypress=this.doc.onkeydown=this.doc.onkeyup=null;
                if (dynapi.ua.ns4) elm.releaseEvents(Event.KEYPRESS | Event.KEYDOWN | 
Event.KEYUP);
                elm.onkeypress=elm.onkeydown=elm.onkeyup=null;
        }
};
DynDocument.prototype.captureHotKey = function(key,fn){
        var klst=((key+'').toLowerCase()).split('+');
        klst.sort();
        key=klst.join('+');
        if(!this._hotKeys){
                this._hotKeys={};
                this._keyDn={};
                this._keyLst='';
                this.captureKeyEvents();
                this.addEventListener({
                        onkeydown:function(e){
                                var k = e.which;
                                var o = e.getSource();  
                                // to-do: add opera v7 key code (57xxx), e.g 57388
                                if (k==13) k="enter";
                                else if(k==27) k="esc";
                                else if(k==45) k="insert";
                                else if(k==46) k="delete";
                                else if(k==36) k="home";
                                else if(k==35) k="end";
                                else if(k==33) k="pgup";
                                else if(k==34) k="pgdn";
                                else if(k==38) k="up";
                                else if(k==40) k="down";
                                else if(k==37) k="left";
                                else if(k==39) k="right";                              
 
                                else if(e.altKey && !o._keyDn['alt']) k="alt";
                                else if(e.ctrlKey && !o._keyDn['ctrl']) k="ctrl";
                                else if(e.shiftKey && !o._keyDn['shift']) k="shift";
                                else k=(String.fromCharCode(k)).toLowerCase();
                                if(!o._keyDn[k]) {
                                        // store new key in keyDn array
                                        o._keyLst+=(((o._keyLst)? '+':'')+k); // build 
key list
                                        var ar=o._keyLst.split('+');
                                        ar.sort();
                                        o._keyLst=ar.join('+');
                                        o._keyDn[k]=true;
                                }
                                k=o._hotKeys[o._keyLst];
                                if(k){
                                        o._keyLst='';o._keyDn={};
                                        if(typeof(k)=='string') return eval(k); else 
return k();
                                }
                        },
                        onkeyup:function(e){
                                var o=e.getSource();    
                                o._keyLst='';o._keyDn={};
                        }
                });
        }
        this._hotKeys[key]=fn;
};
DynDocument.prototype.releaseHotKey = function(key){
        if(this._hotKeys) delete this._hotKeys[key];
};

//DynLayer.prototype.captureKeyEvents=function() {
//      if(!this.elm) return;
//      if(dynapi.ua.def&&!dynapi.ua.ie) {
//              this.elm.addEventListener("keydown",DynKeyEvent.EventMethod,false);
//              this.elm.addEventListener("keyup",DynKeyEvent.EventMethod,false);
//              this.elm.addEventListener("keypress",DynKeyEvent.EventMethod,false);
//      }
//      else {
//              if (dynapi.ua.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(dynapi.ua.def&&!dynapi.ua.ie) {
//              this.elm.removeEventListener("keydown",DynKeyEvent.EventMethod,false);
//              this.elm.removeEventListener("keyup",DynKeyEvent.EventMethod,false);
//              this.elm.removeEventListener("keypress",DynKeyEvent.EventMethod,false);
//      }
//      else {
//              if (dynapi.ua.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._hasMouseEvents) 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._hasMouseEvents && 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._hasMouseEvents) this.releaseKeyEvents();
//      return r;
//};
//DynObject.prototype._OldK_removeAllEventListeners = 
DynObject.prototype.removeAllEventListeners;
//DynObject.prototype.removeAllEventListeners = function() {
//      var r = this._OldK_removeAllEventListeners();
//      this.releaseKeyEvents();
//      return r;
//};
\ 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