]>
Commit | Line | Data |
---|---|---|
2f01fe57 AD |
1 | /* |
2 | Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. | |
3 | Available via Academic Free License >= 2.1 OR the modified BSD license. | |
4 | see: http://dojotoolkit.org/license for details | |
5 | */ | |
6 | ||
7 | ||
8 | if(!dojo._hasResource["dojo._base.event"]){ | |
9 | dojo._hasResource["dojo._base.event"]=true; | |
10 | dojo.provide("dojo._base.event"); | |
11 | dojo.require("dojo._base.connect"); | |
12 | (function(){ | |
13 | var _1=(dojo._event_listener={add:function(_2,_3,fp){ | |
14 | if(!_2){ | |
15 | return; | |
16 | } | |
17 | _3=_1._normalizeEventName(_3); | |
18 | fp=_1._fixCallback(_3,fp); | |
19 | var _4=_3; | |
20 | if(!dojo.isIE&&(_3=="mouseenter"||_3=="mouseleave")){ | |
21 | var _5=fp; | |
22 | _3=(_3=="mouseenter")?"mouseover":"mouseout"; | |
23 | fp=function(e){ | |
24 | if(!dojo.isDescendant(e.relatedTarget,_2)){ | |
25 | return _5.call(this,e); | |
26 | } | |
27 | }; | |
28 | } | |
29 | _2.addEventListener(_3,fp,false); | |
30 | return fp; | |
31 | },remove:function(_6,_7,_8){ | |
32 | if(_6){ | |
33 | _7=_1._normalizeEventName(_7); | |
34 | if(!dojo.isIE&&(_7=="mouseenter"||_7=="mouseleave")){ | |
35 | _7=(_7=="mouseenter")?"mouseover":"mouseout"; | |
36 | } | |
37 | _6.removeEventListener(_7,_8,false); | |
38 | } | |
39 | },_normalizeEventName:function(_9){ | |
40 | return _9.slice(0,2)=="on"?_9.slice(2):_9; | |
41 | },_fixCallback:function(_a,fp){ | |
42 | return _a!="keypress"?fp:function(e){ | |
43 | return fp.call(this,_1._fixEvent(e,this)); | |
44 | }; | |
45 | },_fixEvent:function(_b,_c){ | |
46 | switch(_b.type){ | |
47 | case "keypress": | |
48 | _1._setKeyChar(_b); | |
49 | break; | |
50 | } | |
51 | return _b; | |
52 | },_setKeyChar:function(_d){ | |
53 | _d.keyChar=_d.charCode?String.fromCharCode(_d.charCode):""; | |
54 | _d.charOrCode=_d.keyChar||_d.keyCode; | |
55 | },_punctMap:{106:42,111:47,186:59,187:43,188:44,189:45,190:46,191:47,192:96,219:91,220:92,221:93,222:39}}); | |
56 | dojo.fixEvent=function(_e,_f){ | |
57 | return _1._fixEvent(_e,_f); | |
58 | }; | |
59 | dojo.stopEvent=function(evt){ | |
60 | evt.preventDefault(); | |
61 | evt.stopPropagation(); | |
62 | }; | |
63 | var _10=dojo._listener; | |
64 | dojo._connect=function(obj,_11,_12,_13,_14){ | |
65 | var _15=obj&&(obj.nodeType||obj.attachEvent||obj.addEventListener); | |
66 | var lid=_15?(_14?2:1):0,l=[dojo._listener,_1,_10][lid]; | |
67 | var h=l.add(obj,_11,dojo.hitch(_12,_13)); | |
68 | return [obj,_11,h,lid]; | |
69 | }; | |
70 | dojo._disconnect=function(obj,_16,_17,_18){ | |
71 | ([dojo._listener,_1,_10][_18]).remove(obj,_16,_17); | |
72 | }; | |
73 | dojo.keys={BACKSPACE:8,TAB:9,CLEAR:12,ENTER:13,SHIFT:16,CTRL:17,ALT:18,META:dojo.isSafari?91:224,PAUSE:19,CAPS_LOCK:20,ESCAPE:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT_ARROW:37,UP_ARROW:38,RIGHT_ARROW:39,DOWN_ARROW:40,INSERT:45,DELETE:46,HELP:47,LEFT_WINDOW:91,RIGHT_WINDOW:92,SELECT:93,NUMPAD_0:96,NUMPAD_1:97,NUMPAD_2:98,NUMPAD_3:99,NUMPAD_4:100,NUMPAD_5:101,NUMPAD_6:102,NUMPAD_7:103,NUMPAD_8:104,NUMPAD_9:105,NUMPAD_MULTIPLY:106,NUMPAD_PLUS:107,NUMPAD_ENTER:108,NUMPAD_MINUS:109,NUMPAD_PERIOD:110,NUMPAD_DIVIDE:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,F13:124,F14:125,F15:126,NUM_LOCK:144,SCROLL_LOCK:145,copyKey:dojo.isMac&&!dojo.isAIR?(dojo.isSafari?91:224):17}; | |
74 | var _19=dojo.isMac?"metaKey":"ctrlKey"; | |
75 | dojo.isCopyKey=function(e){ | |
76 | return e[_19]; | |
77 | }; | |
78 | if(dojo.isIE){ | |
79 | dojo.mouseButtons={LEFT:1,MIDDLE:4,RIGHT:2,isButton:function(e,_1a){ | |
80 | return e.button&_1a; | |
81 | },isLeft:function(e){ | |
82 | return e.button&1; | |
83 | },isMiddle:function(e){ | |
84 | return e.button&4; | |
85 | },isRight:function(e){ | |
86 | return e.button&2; | |
87 | }}; | |
88 | }else{ | |
89 | dojo.mouseButtons={LEFT:0,MIDDLE:1,RIGHT:2,isButton:function(e,_1b){ | |
90 | return e.button==_1b; | |
91 | },isLeft:function(e){ | |
92 | return e.button==0; | |
93 | },isMiddle:function(e){ | |
94 | return e.button==1; | |
95 | },isRight:function(e){ | |
96 | return e.button==2; | |
97 | }}; | |
98 | } | |
99 | if(dojo.isIE){ | |
100 | var _1c=function(e,_1d){ | |
101 | try{ | |
102 | return (e.keyCode=_1d); | |
103 | } | |
104 | catch(e){ | |
105 | return 0; | |
106 | } | |
107 | }; | |
108 | var iel=dojo._listener; | |
109 | var _1e=(dojo._ieListenersName="_"+dojo._scopeName+"_listeners"); | |
110 | if(!dojo.config._allow_leaks){ | |
111 | _10=iel=dojo._ie_listener={handlers:[],add:function(_1f,_20,_21){ | |
112 | _1f=_1f||dojo.global; | |
113 | var f=_1f[_20]; | |
114 | if(!f||!f[_1e]){ | |
115 | var d=dojo._getIeDispatcher(); | |
116 | d.target=f&&(ieh.push(f)-1); | |
117 | d[_1e]=[]; | |
118 | f=_1f[_20]=d; | |
119 | } | |
120 | return f[_1e].push(ieh.push(_21)-1); | |
121 | },remove:function(_22,_23,_24){ | |
122 | var f=(_22||dojo.global)[_23],l=f&&f[_1e]; | |
123 | if(f&&l&&_24--){ | |
124 | delete ieh[l[_24]]; | |
125 | delete l[_24]; | |
126 | } | |
127 | }}; | |
128 | var ieh=iel.handlers; | |
129 | } | |
130 | dojo.mixin(_1,{add:function(_25,_26,fp){ | |
131 | if(!_25){ | |
132 | return; | |
133 | } | |
134 | _26=_1._normalizeEventName(_26); | |
135 | if(_26=="onkeypress"){ | |
136 | var kd=_25.onkeydown; | |
137 | if(!kd||!kd[_1e]||!kd._stealthKeydownHandle){ | |
138 | var h=_1.add(_25,"onkeydown",_1._stealthKeyDown); | |
139 | kd=_25.onkeydown; | |
140 | kd._stealthKeydownHandle=h; | |
141 | kd._stealthKeydownRefs=1; | |
142 | }else{ | |
143 | kd._stealthKeydownRefs++; | |
144 | } | |
145 | } | |
146 | return iel.add(_25,_26,_1._fixCallback(fp)); | |
147 | },remove:function(_27,_28,_29){ | |
148 | _28=_1._normalizeEventName(_28); | |
149 | iel.remove(_27,_28,_29); | |
150 | if(_28=="onkeypress"){ | |
151 | var kd=_27.onkeydown; | |
152 | if(--kd._stealthKeydownRefs<=0){ | |
153 | iel.remove(_27,"onkeydown",kd._stealthKeydownHandle); | |
154 | delete kd._stealthKeydownHandle; | |
155 | } | |
156 | } | |
157 | },_normalizeEventName:function(_2a){ | |
158 | return _2a.slice(0,2)!="on"?"on"+_2a:_2a; | |
159 | },_nop:function(){ | |
160 | },_fixEvent:function(evt,_2b){ | |
161 | if(!evt){ | |
162 | var w=_2b&&(_2b.ownerDocument||_2b.document||_2b).parentWindow||window; | |
163 | evt=w.event; | |
164 | } | |
165 | if(!evt){ | |
166 | return (evt); | |
167 | } | |
168 | evt.target=evt.srcElement; | |
169 | evt.currentTarget=(_2b||evt.srcElement); | |
170 | evt.layerX=evt.offsetX; | |
171 | evt.layerY=evt.offsetY; | |
172 | var se=evt.srcElement,doc=(se&&se.ownerDocument)||document; | |
173 | var _2c=((dojo.isIE<6)||(doc["compatMode"]=="BackCompat"))?doc.body:doc.documentElement; | |
174 | var _2d=dojo._getIeDocumentElementOffset(); | |
175 | evt.pageX=evt.clientX+dojo._fixIeBiDiScrollLeft(_2c.scrollLeft||0)-_2d.x; | |
176 | evt.pageY=evt.clientY+(_2c.scrollTop||0)-_2d.y; | |
177 | if(evt.type=="mouseover"){ | |
178 | evt.relatedTarget=evt.fromElement; | |
179 | } | |
180 | if(evt.type=="mouseout"){ | |
181 | evt.relatedTarget=evt.toElement; | |
182 | } | |
183 | evt.stopPropagation=_1._stopPropagation; | |
184 | evt.preventDefault=_1._preventDefault; | |
185 | return _1._fixKeys(evt); | |
186 | },_fixKeys:function(evt){ | |
187 | switch(evt.type){ | |
188 | case "keypress": | |
189 | var c=("charCode" in evt?evt.charCode:evt.keyCode); | |
190 | if(c==10){ | |
191 | c=0; | |
192 | evt.keyCode=13; | |
193 | }else{ | |
194 | if(c==13||c==27){ | |
195 | c=0; | |
196 | }else{ | |
197 | if(c==3){ | |
198 | c=99; | |
199 | } | |
200 | } | |
201 | } | |
202 | evt.charCode=c; | |
203 | _1._setKeyChar(evt); | |
204 | break; | |
205 | } | |
206 | return evt; | |
207 | },_stealthKeyDown:function(evt){ | |
208 | var kp=evt.currentTarget.onkeypress; | |
209 | if(!kp||!kp[_1e]){ | |
210 | return; | |
211 | } | |
212 | var k=evt.keyCode; | |
213 | var _2e=k!=13&&k!=32&&k!=27&&(k<48||k>90)&&(k<96||k>111)&&(k<186||k>192)&&(k<219||k>222); | |
214 | if(_2e||evt.ctrlKey){ | |
215 | var c=_2e?0:k; | |
216 | if(evt.ctrlKey){ | |
217 | if(k==3||k==13){ | |
218 | return; | |
219 | }else{ | |
220 | if(c>95&&c<106){ | |
221 | c-=48; | |
222 | }else{ | |
223 | if((!evt.shiftKey)&&(c>=65&&c<=90)){ | |
224 | c+=32; | |
225 | }else{ | |
226 | c=_1._punctMap[c]||c; | |
227 | } | |
228 | } | |
229 | } | |
230 | } | |
231 | var _2f=_1._synthesizeEvent(evt,{type:"keypress",faux:true,charCode:c}); | |
232 | kp.call(evt.currentTarget,_2f); | |
233 | evt.cancelBubble=_2f.cancelBubble; | |
234 | evt.returnValue=_2f.returnValue; | |
235 | _1c(evt,_2f.keyCode); | |
236 | } | |
237 | },_stopPropagation:function(){ | |
238 | this.cancelBubble=true; | |
239 | },_preventDefault:function(){ | |
240 | this.bubbledKeyCode=this.keyCode; | |
241 | if(this.ctrlKey){ | |
242 | _1c(this,0); | |
243 | } | |
244 | this.returnValue=false; | |
245 | }}); | |
246 | dojo.stopEvent=function(evt){ | |
247 | evt=evt||window.event; | |
248 | _1._stopPropagation.call(evt); | |
249 | _1._preventDefault.call(evt); | |
250 | }; | |
251 | } | |
252 | _1._synthesizeEvent=function(evt,_30){ | |
253 | var _31=dojo.mixin({},evt,_30); | |
254 | _1._setKeyChar(_31); | |
255 | _31.preventDefault=function(){ | |
256 | evt.preventDefault(); | |
257 | }; | |
258 | _31.stopPropagation=function(){ | |
259 | evt.stopPropagation(); | |
260 | }; | |
261 | return _31; | |
262 | }; | |
263 | if(dojo.isOpera){ | |
264 | dojo.mixin(_1,{_fixEvent:function(evt,_32){ | |
265 | switch(evt.type){ | |
266 | case "keypress": | |
267 | var c=evt.which; | |
268 | if(c==3){ | |
269 | c=99; | |
270 | } | |
271 | c=c<41&&!evt.shiftKey?0:c; | |
272 | if(evt.ctrlKey&&!evt.shiftKey&&c>=65&&c<=90){ | |
273 | c+=32; | |
274 | } | |
275 | return _1._synthesizeEvent(evt,{charCode:c}); | |
276 | } | |
277 | return evt; | |
278 | }}); | |
279 | } | |
280 | if(dojo.isWebKit){ | |
281 | _1._add=_1.add; | |
282 | _1._remove=_1.remove; | |
283 | dojo.mixin(_1,{add:function(_33,_34,fp){ | |
284 | if(!_33){ | |
285 | return; | |
286 | } | |
287 | var _35=_1._add(_33,_34,fp); | |
288 | if(_1._normalizeEventName(_34)=="keypress"){ | |
289 | _35._stealthKeyDownHandle=_1._add(_33,"keydown",function(evt){ | |
290 | var k=evt.keyCode; | |
291 | var _36=k!=13&&k!=32&&(k<48||k>90)&&(k<96||k>111)&&(k<186||k>192)&&(k<219||k>222); | |
292 | if(_36||evt.ctrlKey){ | |
293 | var c=_36?0:k; | |
294 | if(evt.ctrlKey){ | |
295 | if(k==3||k==13){ | |
296 | return; | |
297 | }else{ | |
298 | if(c>95&&c<106){ | |
299 | c-=48; | |
300 | }else{ | |
301 | if(!evt.shiftKey&&c>=65&&c<=90){ | |
302 | c+=32; | |
303 | }else{ | |
304 | c=_1._punctMap[c]||c; | |
305 | } | |
306 | } | |
307 | } | |
308 | } | |
309 | var _37=_1._synthesizeEvent(evt,{type:"keypress",faux:true,charCode:c}); | |
310 | fp.call(evt.currentTarget,_37); | |
311 | } | |
312 | }); | |
313 | } | |
314 | return _35; | |
315 | },remove:function(_38,_39,_3a){ | |
316 | if(_38){ | |
317 | if(_3a._stealthKeyDownHandle){ | |
318 | _1._remove(_38,"keydown",_3a._stealthKeyDownHandle); | |
319 | } | |
320 | _1._remove(_38,_39,_3a); | |
321 | } | |
322 | },_fixEvent:function(evt,_3b){ | |
323 | switch(evt.type){ | |
324 | case "keypress": | |
325 | if(evt.faux){ | |
326 | return evt; | |
327 | } | |
328 | var c=evt.charCode; | |
329 | c=c>=32?c:0; | |
330 | return _1._synthesizeEvent(evt,{charCode:c,faux:true}); | |
331 | } | |
332 | return evt; | |
333 | }}); | |
334 | } | |
335 | })(); | |
336 | if(dojo.isIE){ | |
337 | dojo._ieDispatcher=function(_3c,_3d){ | |
338 | var ap=Array.prototype,h=dojo._ie_listener.handlers,c=_3c.callee,ls=c[dojo._ieListenersName],t=h[c.target]; | |
339 | var r=t&&t.apply(_3d,_3c); | |
340 | var lls=[].concat(ls); | |
341 | for(var i in lls){ | |
342 | var f=h[lls[i]]; | |
343 | if(!(i in ap)&&f){ | |
344 | f.apply(_3d,_3c); | |
345 | } | |
346 | } | |
347 | return r; | |
348 | }; | |
349 | dojo._getIeDispatcher=function(){ | |
350 | return new Function(dojo._scopeName+"._ieDispatcher(arguments, this)"); | |
351 | }; | |
352 | dojo._event_listener._fixCallback=function(fp){ | |
353 | var f=dojo._event_listener._fixEvent; | |
354 | return function(e){ | |
355 | return fp.call(this,f(e,this)); | |
356 | }; | |
357 | }; | |
358 | } | |
359 | } |