[ Index ]
 

Code source de eGroupWare 1.2.106-2

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/phpgwapi/js/dynapi/api/ -> mouse_ns4.js (source)

   1  /*
   2      DynAPI Distribution
   3      MouseEvent Class
   4      The DynAPI Distribution is distributed under the terms of the GNU LGPL license.
   5      
   6      requires: dynapi.api.DynDocument
   7  */
   8  function MouseEvent(dyndoc) {
   9      this.DynEvent = DynEvent;
  10      this.DynEvent();
  11      this.bubble = true;
  12      this._browserEvent = null;
  13      this._relative = null;
  14      this._dyndoc = dyndoc;
  15  };
  16  var p = dynapi.setPrototype('MouseEvent','DynEvent');
  17  p.getX = function() {return this.x};
  18  p.getY = function() {return this.y};
  19  p.getPageX = function() {return this.pageX};
  20  p.getPageY = function() {return this.pageY};
  21  //p.trapMouseUp = dynapi.functions.Null;
  22  p.getRelative = function() {return this._relative};
  23  p.getButton = function() {
  24      if (!this._browserEvent) return "left";
  25      var b = this._browserEvent.which;
  26      if (b==2) return "middle";
  27      if (b==3) return "right";
  28      else return "left";
  29  };
  30  p._init = function(type,e,src) {
  31      this.type = type;
  32      this._browserEvent = e;
  33      this.origin = src;
  34      this.bubbleChild = null;
  35      this.pageX = e.pageX-this._dyndoc.frame.pageXOffset;
  36      this.pageY = e.pageY-this._dyndoc.frame.pageYOffset;
  37      if (e.target._dynobj == src) {
  38          this.x = e.layerX;
  39          this.y = e.layerY;
  40      }
  41      else {
  42          this.x = e.pageX - (src.pageX||0);
  43          this.y = e.pageY - (src.pageY||0);
  44      }
  45      this.defaultValue = true;
  46      this.bubble = true;
  47  };
  48  p._invoke = function() {
  49      var o = this.origin;
  50      o.invokeEvent(this.type,this);
  51      // synthetic click event
  52      if (this.type=='mouseup') {
  53          this._init('click',this._browserEvent,o);
  54          this._invoke();
  55          
  56          // synthetic dblclick event
  57          if (dynapi.ua.other);
  58      }
  59  };
  60  function main() {
  61      dynapi.document._mouseEvent = new MouseEvent(dynapi.document);
  62  };
  63  if (!dynapi.loaded) main();
  64  MouseEvent._docMoveHandler = function(e) {
  65      var dyndoc = this._dynobj;
  66      var src = e.target;
  67      var dynobj = src._dynobj || src._dynobji;
  68      
  69      if (!dynobj || !dynobj._hasMouseEvents) {
  70          var rel=dyndoc._moveOver;
  71          if(rel && dynobj && !dynobj.isChildOf(rel)) {
  72              var me = dyndoc._mouseEvent;
  73              me._init('mouseout',e,rel);
  74              me._invoke();
  75              dyndoc._moveOver = null;
  76          }
  77          if(dynobj){
  78              dynobj=dynobj.parent;
  79              while (dynobj && !dynobj._hasMouseEvents){
  80                  dynobj=dynobj.parent;
  81              }
  82          }
  83          if(!dynobj) return true;
  84      }
  85      
  86      var me = dyndoc._mouseEvent;
  87      //dynapi.debug.status('move '+dynobj.name+' '+e.layerX+' '+e.layerY);
  88      me._init('mousemove',e,dynobj);
  89      me._invoke();
  90      var defaultVal = me.defaultValue;
  91      
  92      // synthetic mouseover/out events
  93      if (dyndoc._moveOver!=dynobj) {
  94          var rel = dyndoc._moveOver;
  95          //var bubble = true;
  96          // mouse out
  97          if (rel && !dynobj.isChildOf(rel)) {  //   && !rel.isChildOf(dynobj)
  98              // during mouseout e.getRelated() is which elm it is moving to
  99              //bubble = !dynobj.isChildOf(rel);
 100              me._init('mouseout',e,rel);
 101              //prevent bubbling from child to parent for mouseout
 102              if (rel.isChildOf(dynobj)) me.bubble=false; 
 103              me._relative = dynobj;
 104              me._invoke();
 105              //MouseEvent._generateEvent('mouseout',e,me,rel,dynobj,bubble);  // out occurs before over
 106          }        
 107          // mouse over
 108          dyndoc._moveOver = dynobj;
 109          //if (rel) var bubble = !rel.isChildOf(dynobj);
 110          //var bubble = !dynobj.isChildOf(rel);
 111          // during mouseover e.getRelated() is which elm it is moving to
 112          if(!rel || !rel.isChildOf(dynobj)){
 113              me._init('mouseover',e,dynobj);
 114              //prevent bubbling from child to parent for mouseover
 115              if(dynobj.isChildOf(rel)) me.bubble=false;
 116              me._relative = rel;
 117              me._invoke();
 118          }
 119          //MouseEvent._generateEvent('mouseover',e,me,dynobj,rel);
 120      }
 121      // prevent image dragging
 122      if (e.type=="mousemove" && (e.target+'')=='[object Image]') {
 123          me.defaultValue = defaultVal = false;
 124      }
 125      
 126      return defaultVal;
 127  };
 128  MouseEvent._eventHandler = function(e) {
 129      var src = e.target;
 130      var dynobj = this._dynobj;
 131      if (!dynobj) return true;
 132      
 133      var dyndoc = dynobj._dyndoc;
 134      var me = dyndoc._mouseEvent;
 135      me._wasHandled = false;
 136      var r = routeEvent(e);
 137      if (!me._wasHandled) {
 138          //if (src._dynobji) {  // src._dynobji == dynlayer.doc.images[x]._dynobji
 139          //    me._init(e.type,e,src._dynobji);
 140          //    if (e.type=='mousedown') me.defaultValue = false;
 141          //    me._invoke();
 142          //}
 143          // else 
 144          if (src._dynobj) {  // src._dynobj == dynlayer.doc._dynobj,dynlayer.doc.images[x]._dynobj,dynlayer.doc.links[x]._dynobj
 145              me._init(e.type,e,src._dynobj);
 146              me._invoke();
 147          }
 148          else {  // dynobj == dynlayer.elm._dynobj
 149              me._init(e.type,e,dynobj);
 150              me._invoke();
 151          }
 152          me._wasHandled = true;
 153      }
 154      dynobj = (src._dynobj)? src._dynobj:dynobj;
 155      if (e.type=='mousedown'){
 156          // disable text select
 157          if(dynobj._textSelectable==false) {
 158              // ns4 will disable hyperlinks. this is my workaround
 159              me.defaultValue =(e.target.href)? null:false;
 160          }
 161          
 162          // allow images (<input type="image">) to be clicked
 163          if ((e.target+'')=='[object Image]') {
 164              me.defaultValue = true;
 165          }
 166          
 167          // allow form elements to be selected
 168          var t = (e.target.type+'').toLowerCase();
 169          if (t=='button'||t=='checkbox'||t=='radio') {
 170              me.defaultValue=true;
 171          }
 172      }
 173      
 174      return me.defaultValue;
 175  };
 176  DynElement.prototype.disableContextMenu = function(){
 177      this._noContextMenu = true;
 178      // can this be done in ns?
 179  };
 180  DynElement.prototype.captureMouseEvents = function() {
 181      this._hasMouseEvents = true;
 182      var elm = this.elm;
 183      if (elm) {
 184          elm.captureEvents(Event.MOUSEDOWN | Event.MOUSEUP | Event.DBLCLICK);
 185          elm.onmousedown = elm.onmouseup = elm.ondblclick = MouseEvent._eventHandler;
 186          
 187          if (this.getClassName()=='DynDocument') {  // move/over/out events are generated from the document
 188              this.doc.captureEvents(Event.MOUSEMOVE);
 189              elm.onmousemove = MouseEvent._docMoveHandler;
 190          }
 191          elm._dynobj = this;
 192          this.doc._dynobj = this;
 193          if(this._blkBoardElm) this.elm.document._dynobj = this;
 194          for (var i=0;i<this.doc.images.length;i++) this.doc.images[i]._dynobj=this; // was _dynobji
 195          for (var i=0;i<this.doc.links.length;i++) this.doc.links[i]._dynobj=this;
 196      }
 197  };
 198  DynElement.prototype.releaseMouseEvents = function() {
 199      this._hasMouseEvents = false;
 200      var elm = this.elm;
 201      if (elm) {
 202          elm.releaseEvents(Event.MOUSEDOWN | Event.MOUSEUP | Event.DBLCLICK);
 203          elm.onmousedown = elm.onmouseup = elm.ondblclick = null;
 204          
 205          if (this.getClassName()=='DynDocument') {
 206              elm.releaseEvents(Event.MOUSEMOVE);
 207              elm.onmousemove = null;
 208          }
 209          elm._dynobj = null;
 210          this.doc._dynobj = null;
 211          for (var i=0;i<this.doc.images.length;i++) this.doc.images[i]._dynobji=null;
 212          for (var i=0;i<this.doc.links.length;i++) this.doc.links[i]._dynobj=null;
 213      }
 214  };


Généré le : Sun Feb 25 17:20:01 2007 par Balluche grâce à PHPXref 0.7