[ Index ] |
|
Code source de eGroupWare 1.2.106-2 |
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 };
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Sun Feb 25 17:20:01 2007 | par Balluche grâce à PHPXref 0.7 |