You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
489 lines
9.6 KiB
489 lines
9.6 KiB
/* |
|
Copyright (c) 2004-2006, The Dojo Foundation |
|
All Rights Reserved. |
|
|
|
Licensed under the Academic Free License version 2.1 or above OR the |
|
modified BSD license. For more information on Dojo licensing, see: |
|
|
|
http://dojotoolkit.org/community/licensing.shtml |
|
*/ |
|
|
|
|
|
dojo.provide("dojo.event.browser"); |
|
dojo.require("dojo.event.common"); |
|
dojo._ie_clobber=new function(){ |
|
this.clobberNodes=[]; |
|
function nukeProp(_1,_2){ |
|
try{ |
|
_1[_2]=null; |
|
} |
|
catch(e){ |
|
} |
|
try{ |
|
delete _1[_2]; |
|
} |
|
catch(e){ |
|
} |
|
try{ |
|
_1.removeAttribute(_2); |
|
} |
|
catch(e){ |
|
} |
|
} |
|
this.clobber=function(_3){ |
|
var na; |
|
var _5; |
|
if(_3){ |
|
_5=_3.all||_3.getElementsByTagName("*"); |
|
na=[_3]; |
|
for(var x=0;x<_5.length;x++){ |
|
if(_5[x]["__doClobber__"]){ |
|
na.push(_5[x]); |
|
} |
|
} |
|
}else{ |
|
try{ |
|
window.onload=null; |
|
} |
|
catch(e){ |
|
} |
|
na=(this.clobberNodes.length)?this.clobberNodes:document.all; |
|
} |
|
_5=null; |
|
var _7={}; |
|
for(var i=na.length-1;i>=0;i=i-1){ |
|
var el=na[i]; |
|
try{ |
|
if(el&&el["__clobberAttrs__"]){ |
|
for(var j=0;j<el.__clobberAttrs__.length;j++){ |
|
nukeProp(el,el.__clobberAttrs__[j]); |
|
} |
|
nukeProp(el,"__clobberAttrs__"); |
|
nukeProp(el,"__doClobber__"); |
|
} |
|
} |
|
catch(e){ |
|
} |
|
} |
|
na=null; |
|
}; |
|
}; |
|
if(dojo.render.html.ie){ |
|
dojo.addOnUnload(function(){ |
|
dojo._ie_clobber.clobber(); |
|
try{ |
|
if((dojo["widget"])&&(dojo.widget["manager"])){ |
|
dojo.widget.manager.destroyAll(); |
|
} |
|
} |
|
catch(e){ |
|
} |
|
if(dojo.widget){ |
|
for(var _b in dojo.widget._templateCache){ |
|
if(dojo.widget._templateCache[_b].node){ |
|
dojo.dom.destroyNode(dojo.widget._templateCache[_b].node); |
|
dojo.widget._templateCache[_b].node=null; |
|
delete dojo.widget._templateCache[_b].node; |
|
} |
|
} |
|
} |
|
try{ |
|
window.onload=null; |
|
} |
|
catch(e){ |
|
} |
|
try{ |
|
window.onunload=null; |
|
} |
|
catch(e){ |
|
} |
|
dojo._ie_clobber.clobberNodes=[]; |
|
}); |
|
} |
|
dojo.event.browser=new function(){ |
|
var _c=0; |
|
this.normalizedEventName=function(_d){ |
|
switch(_d){ |
|
case "CheckboxStateChange": |
|
case "DOMAttrModified": |
|
case "DOMMenuItemActive": |
|
case "DOMMenuItemInactive": |
|
case "DOMMouseScroll": |
|
case "DOMNodeInserted": |
|
case "DOMNodeRemoved": |
|
case "RadioStateChange": |
|
return _d; |
|
break; |
|
default: |
|
var _e=_d.toLowerCase(); |
|
return (_e.indexOf("on")==0)?_e.substr(2):_e; |
|
break; |
|
} |
|
}; |
|
this.clean=function(_f){ |
|
if(dojo.render.html.ie){ |
|
dojo._ie_clobber.clobber(_f); |
|
} |
|
}; |
|
this.addClobberNode=function(_10){ |
|
if(!dojo.render.html.ie){ |
|
return; |
|
} |
|
if(!_10["__doClobber__"]){ |
|
_10.__doClobber__=true; |
|
dojo._ie_clobber.clobberNodes.push(_10); |
|
_10.__clobberAttrs__=[]; |
|
} |
|
}; |
|
this.addClobberNodeAttrs=function(_11,_12){ |
|
if(!dojo.render.html.ie){ |
|
return; |
|
} |
|
this.addClobberNode(_11); |
|
for(var x=0;x<_12.length;x++){ |
|
_11.__clobberAttrs__.push(_12[x]); |
|
} |
|
}; |
|
this.removeListener=function(_14,_15,fp,_17){ |
|
if(!_17){ |
|
var _17=false; |
|
} |
|
_15=dojo.event.browser.normalizedEventName(_15); |
|
if(_15=="key"){ |
|
if(dojo.render.html.ie){ |
|
this.removeListener(_14,"onkeydown",fp,_17); |
|
} |
|
_15="keypress"; |
|
} |
|
if(_14.removeEventListener){ |
|
_14.removeEventListener(_15,fp,_17); |
|
} |
|
}; |
|
this.addListener=function(_18,_19,fp,_1b,_1c){ |
|
if(!_18){ |
|
return; |
|
} |
|
if(!_1b){ |
|
var _1b=false; |
|
} |
|
_19=dojo.event.browser.normalizedEventName(_19); |
|
if(_19=="key"){ |
|
if(dojo.render.html.ie){ |
|
this.addListener(_18,"onkeydown",fp,_1b,_1c); |
|
} |
|
_19="keypress"; |
|
} |
|
if(!_1c){ |
|
var _1d=function(evt){ |
|
if(!evt){ |
|
evt=window.event; |
|
} |
|
var ret=fp(dojo.event.browser.fixEvent(evt,this)); |
|
if(_1b){ |
|
dojo.event.browser.stopEvent(evt); |
|
} |
|
return ret; |
|
}; |
|
}else{ |
|
_1d=fp; |
|
} |
|
if(_18.addEventListener){ |
|
_18.addEventListener(_19,_1d,_1b); |
|
return _1d; |
|
}else{ |
|
_19="on"+_19; |
|
if(typeof _18[_19]=="function"){ |
|
var _20=_18[_19]; |
|
_18[_19]=function(e){ |
|
_20(e); |
|
return _1d(e); |
|
}; |
|
}else{ |
|
_18[_19]=_1d; |
|
} |
|
if(dojo.render.html.ie){ |
|
this.addClobberNodeAttrs(_18,[_19]); |
|
} |
|
return _1d; |
|
} |
|
}; |
|
this.isEvent=function(obj){ |
|
return (typeof obj!="undefined")&&(obj)&&(typeof Event!="undefined")&&(obj.eventPhase); |
|
}; |
|
this.currentEvent=null; |
|
this.callListener=function(_23,_24){ |
|
if(typeof _23!="function"){ |
|
dojo.raise("listener not a function: "+_23); |
|
} |
|
dojo.event.browser.currentEvent.currentTarget=_24; |
|
return _23.call(_24,dojo.event.browser.currentEvent); |
|
}; |
|
this._stopPropagation=function(){ |
|
dojo.event.browser.currentEvent.cancelBubble=true; |
|
}; |
|
this._preventDefault=function(){ |
|
dojo.event.browser.currentEvent.returnValue=false; |
|
}; |
|
this.keys={KEY_BACKSPACE:8,KEY_TAB:9,KEY_CLEAR:12,KEY_ENTER:13,KEY_SHIFT:16,KEY_CTRL:17,KEY_ALT:18,KEY_PAUSE:19,KEY_CAPS_LOCK:20,KEY_ESCAPE:27,KEY_SPACE:32,KEY_PAGE_UP:33,KEY_PAGE_DOWN:34,KEY_END:35,KEY_HOME:36,KEY_LEFT_ARROW:37,KEY_UP_ARROW:38,KEY_RIGHT_ARROW:39,KEY_DOWN_ARROW:40,KEY_INSERT:45,KEY_DELETE:46,KEY_HELP:47,KEY_LEFT_WINDOW:91,KEY_RIGHT_WINDOW:92,KEY_SELECT:93,KEY_NUMPAD_0:96,KEY_NUMPAD_1:97,KEY_NUMPAD_2:98,KEY_NUMPAD_3:99,KEY_NUMPAD_4:100,KEY_NUMPAD_5:101,KEY_NUMPAD_6:102,KEY_NUMPAD_7:103,KEY_NUMPAD_8:104,KEY_NUMPAD_9:105,KEY_NUMPAD_MULTIPLY:106,KEY_NUMPAD_PLUS:107,KEY_NUMPAD_ENTER:108,KEY_NUMPAD_MINUS:109,KEY_NUMPAD_PERIOD:110,KEY_NUMPAD_DIVIDE:111,KEY_F1:112,KEY_F2:113,KEY_F3:114,KEY_F4:115,KEY_F5:116,KEY_F6:117,KEY_F7:118,KEY_F8:119,KEY_F9:120,KEY_F10:121,KEY_F11:122,KEY_F12:123,KEY_F13:124,KEY_F14:125,KEY_F15:126,KEY_NUM_LOCK:144,KEY_SCROLL_LOCK:145}; |
|
this.revKeys=[]; |
|
for(var key in this.keys){ |
|
this.revKeys[this.keys[key]]=key; |
|
} |
|
this.fixEvent=function(evt,_27){ |
|
if(!evt){ |
|
if(window["event"]){ |
|
evt=window.event; |
|
} |
|
} |
|
if((evt["type"])&&(evt["type"].indexOf("key")==0)){ |
|
evt.keys=this.revKeys; |
|
for(var key in this.keys){ |
|
evt[key]=this.keys[key]; |
|
} |
|
if(evt["type"]=="keydown"&&dojo.render.html.ie){ |
|
switch(evt.keyCode){ |
|
case evt.KEY_SHIFT: |
|
case evt.KEY_CTRL: |
|
case evt.KEY_ALT: |
|
case evt.KEY_CAPS_LOCK: |
|
case evt.KEY_LEFT_WINDOW: |
|
case evt.KEY_RIGHT_WINDOW: |
|
case evt.KEY_SELECT: |
|
case evt.KEY_NUM_LOCK: |
|
case evt.KEY_SCROLL_LOCK: |
|
case evt.KEY_NUMPAD_0: |
|
case evt.KEY_NUMPAD_1: |
|
case evt.KEY_NUMPAD_2: |
|
case evt.KEY_NUMPAD_3: |
|
case evt.KEY_NUMPAD_4: |
|
case evt.KEY_NUMPAD_5: |
|
case evt.KEY_NUMPAD_6: |
|
case evt.KEY_NUMPAD_7: |
|
case evt.KEY_NUMPAD_8: |
|
case evt.KEY_NUMPAD_9: |
|
case evt.KEY_NUMPAD_PERIOD: |
|
break; |
|
case evt.KEY_NUMPAD_MULTIPLY: |
|
case evt.KEY_NUMPAD_PLUS: |
|
case evt.KEY_NUMPAD_ENTER: |
|
case evt.KEY_NUMPAD_MINUS: |
|
case evt.KEY_NUMPAD_DIVIDE: |
|
break; |
|
case evt.KEY_PAUSE: |
|
case evt.KEY_TAB: |
|
case evt.KEY_BACKSPACE: |
|
case evt.KEY_ENTER: |
|
case evt.KEY_ESCAPE: |
|
case evt.KEY_PAGE_UP: |
|
case evt.KEY_PAGE_DOWN: |
|
case evt.KEY_END: |
|
case evt.KEY_HOME: |
|
case evt.KEY_LEFT_ARROW: |
|
case evt.KEY_UP_ARROW: |
|
case evt.KEY_RIGHT_ARROW: |
|
case evt.KEY_DOWN_ARROW: |
|
case evt.KEY_INSERT: |
|
case evt.KEY_DELETE: |
|
case evt.KEY_F1: |
|
case evt.KEY_F2: |
|
case evt.KEY_F3: |
|
case evt.KEY_F4: |
|
case evt.KEY_F5: |
|
case evt.KEY_F6: |
|
case evt.KEY_F7: |
|
case evt.KEY_F8: |
|
case evt.KEY_F9: |
|
case evt.KEY_F10: |
|
case evt.KEY_F11: |
|
case evt.KEY_F12: |
|
case evt.KEY_F12: |
|
case evt.KEY_F13: |
|
case evt.KEY_F14: |
|
case evt.KEY_F15: |
|
case evt.KEY_CLEAR: |
|
case evt.KEY_HELP: |
|
evt.key=evt.keyCode; |
|
break; |
|
default: |
|
if(evt.ctrlKey||evt.altKey){ |
|
var _29=evt.keyCode; |
|
if(_29>=65&&_29<=90&&evt.shiftKey==false){ |
|
_29+=32; |
|
} |
|
if(_29>=1&&_29<=26&&evt.ctrlKey){ |
|
_29+=96; |
|
} |
|
evt.key=String.fromCharCode(_29); |
|
} |
|
} |
|
}else{ |
|
if(evt["type"]=="keypress"){ |
|
if(dojo.render.html.opera){ |
|
if(evt.which==0){ |
|
evt.key=evt.keyCode; |
|
}else{ |
|
if(evt.which>0){ |
|
switch(evt.which){ |
|
case evt.KEY_SHIFT: |
|
case evt.KEY_CTRL: |
|
case evt.KEY_ALT: |
|
case evt.KEY_CAPS_LOCK: |
|
case evt.KEY_NUM_LOCK: |
|
case evt.KEY_SCROLL_LOCK: |
|
break; |
|
case evt.KEY_PAUSE: |
|
case evt.KEY_TAB: |
|
case evt.KEY_BACKSPACE: |
|
case evt.KEY_ENTER: |
|
case evt.KEY_ESCAPE: |
|
evt.key=evt.which; |
|
break; |
|
default: |
|
var _29=evt.which; |
|
if((evt.ctrlKey||evt.altKey||evt.metaKey)&&(evt.which>=65&&evt.which<=90&&evt.shiftKey==false)){ |
|
_29+=32; |
|
} |
|
evt.key=String.fromCharCode(_29); |
|
} |
|
} |
|
} |
|
}else{ |
|
if(dojo.render.html.ie){ |
|
if(!evt.ctrlKey&&!evt.altKey&&evt.keyCode>=evt.KEY_SPACE){ |
|
evt.key=String.fromCharCode(evt.keyCode); |
|
} |
|
}else{ |
|
if(dojo.render.html.safari){ |
|
switch(evt.keyCode){ |
|
case 25: |
|
evt.key=evt.KEY_TAB; |
|
evt.shift=true; |
|
break; |
|
case 63232: |
|
evt.key=evt.KEY_UP_ARROW; |
|
break; |
|
case 63233: |
|
evt.key=evt.KEY_DOWN_ARROW; |
|
break; |
|
case 63234: |
|
evt.key=evt.KEY_LEFT_ARROW; |
|
break; |
|
case 63235: |
|
evt.key=evt.KEY_RIGHT_ARROW; |
|
break; |
|
case 63236: |
|
evt.key=evt.KEY_F1; |
|
break; |
|
case 63237: |
|
evt.key=evt.KEY_F2; |
|
break; |
|
case 63238: |
|
evt.key=evt.KEY_F3; |
|
break; |
|
case 63239: |
|
evt.key=evt.KEY_F4; |
|
break; |
|
case 63240: |
|
evt.key=evt.KEY_F5; |
|
break; |
|
case 63241: |
|
evt.key=evt.KEY_F6; |
|
break; |
|
case 63242: |
|
evt.key=evt.KEY_F7; |
|
break; |
|
case 63243: |
|
evt.key=evt.KEY_F8; |
|
break; |
|
case 63244: |
|
evt.key=evt.KEY_F9; |
|
break; |
|
case 63245: |
|
evt.key=evt.KEY_F10; |
|
break; |
|
case 63246: |
|
evt.key=evt.KEY_F11; |
|
break; |
|
case 63247: |
|
evt.key=evt.KEY_F12; |
|
break; |
|
case 63250: |
|
evt.key=evt.KEY_PAUSE; |
|
break; |
|
case 63272: |
|
evt.key=evt.KEY_DELETE; |
|
break; |
|
case 63273: |
|
evt.key=evt.KEY_HOME; |
|
break; |
|
case 63275: |
|
evt.key=evt.KEY_END; |
|
break; |
|
case 63276: |
|
evt.key=evt.KEY_PAGE_UP; |
|
break; |
|
case 63277: |
|
evt.key=evt.KEY_PAGE_DOWN; |
|
break; |
|
case 63302: |
|
evt.key=evt.KEY_INSERT; |
|
break; |
|
case 63248: |
|
case 63249: |
|
case 63289: |
|
break; |
|
default: |
|
evt.key=evt.charCode>=evt.KEY_SPACE?String.fromCharCode(evt.charCode):evt.keyCode; |
|
} |
|
}else{ |
|
evt.key=evt.charCode>0?String.fromCharCode(evt.charCode):evt.keyCode; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
if(dojo.render.html.ie){ |
|
if(!evt.target){ |
|
evt.target=evt.srcElement; |
|
} |
|
if(!evt.currentTarget){ |
|
evt.currentTarget=(_27?_27:evt.srcElement); |
|
} |
|
if(!evt.layerX){ |
|
evt.layerX=evt.offsetX; |
|
} |
|
if(!evt.layerY){ |
|
evt.layerY=evt.offsetY; |
|
} |
|
var doc=(evt.srcElement&&evt.srcElement.ownerDocument)?evt.srcElement.ownerDocument:document; |
|
var _2b=((dojo.render.html.ie55)||(doc["compatMode"]=="BackCompat"))?doc.body:doc.documentElement; |
|
if(!evt.pageX){ |
|
evt.pageX=evt.clientX+(_2b.scrollLeft||0); |
|
} |
|
if(!evt.pageY){ |
|
evt.pageY=evt.clientY+(_2b.scrollTop||0); |
|
} |
|
if(evt.type=="mouseover"){ |
|
evt.relatedTarget=evt.fromElement; |
|
} |
|
if(evt.type=="mouseout"){ |
|
evt.relatedTarget=evt.toElement; |
|
} |
|
this.currentEvent=evt; |
|
evt.callListener=this.callListener; |
|
evt.stopPropagation=this._stopPropagation; |
|
evt.preventDefault=this._preventDefault; |
|
} |
|
return evt; |
|
}; |
|
this.stopEvent=function(evt){ |
|
if(window.event){ |
|
evt.cancelBubble=true; |
|
evt.returnValue=false; |
|
}else{ |
|
evt.preventDefault(); |
|
evt.stopPropagation(); |
|
} |
|
}; |
|
};
|
|
|