/* 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.common"); dojo.require("dojo.lang.array"); dojo.require("dojo.lang.extras"); dojo.require("dojo.lang.func"); dojo.event=new function(){ this._canTimeout=dojo.lang.isFunction(dj_global["setTimeout"])||dojo.lang.isAlien(dj_global["setTimeout"]); function interpolateArgs(_1,_2){ var dl=dojo.lang; var ao={srcObj:dj_global,srcFunc:null,adviceObj:dj_global,adviceFunc:null,aroundObj:null,aroundFunc:null,adviceType:(_1.length>2)?_1[0]:"after",precedence:"last",once:false,delay:null,rate:0,adviceMsg:false,maxCalls:-1}; switch(_1.length){ case 0: return; case 1: return; case 2: ao.srcFunc=_1[0]; ao.adviceFunc=_1[1]; break; case 3: if((dl.isObject(_1[0]))&&(dl.isString(_1[1]))&&(dl.isString(_1[2]))){ ao.adviceType="after"; ao.srcObj=_1[0]; ao.srcFunc=_1[1]; ao.adviceFunc=_1[2]; }else{ if((dl.isString(_1[1]))&&(dl.isString(_1[2]))){ ao.srcFunc=_1[1]; ao.adviceFunc=_1[2]; }else{ if((dl.isObject(_1[0]))&&(dl.isString(_1[1]))&&(dl.isFunction(_1[2]))){ ao.adviceType="after"; ao.srcObj=_1[0]; ao.srcFunc=_1[1]; var _5=dl.nameAnonFunc(_1[2],ao.adviceObj,_2); ao.adviceFunc=_5; }else{ if((dl.isFunction(_1[0]))&&(dl.isObject(_1[1]))&&(dl.isString(_1[2]))){ ao.adviceType="after"; ao.srcObj=dj_global; var _5=dl.nameAnonFunc(_1[0],ao.srcObj,_2); ao.srcFunc=_5; ao.adviceObj=_1[1]; ao.adviceFunc=_1[2]; } } } } break; case 4: if((dl.isObject(_1[0]))&&(dl.isObject(_1[2]))){ ao.adviceType="after"; ao.srcObj=_1[0]; ao.srcFunc=_1[1]; ao.adviceObj=_1[2]; ao.adviceFunc=_1[3]; }else{ if((dl.isString(_1[0]))&&(dl.isString(_1[1]))&&(dl.isObject(_1[2]))){ ao.adviceType=_1[0]; ao.srcObj=dj_global; ao.srcFunc=_1[1]; ao.adviceObj=_1[2]; ao.adviceFunc=_1[3]; }else{ if((dl.isString(_1[0]))&&(dl.isFunction(_1[1]))&&(dl.isObject(_1[2]))){ ao.adviceType=_1[0]; ao.srcObj=dj_global; var _5=dl.nameAnonFunc(_1[1],dj_global,_2); ao.srcFunc=_5; ao.adviceObj=_1[2]; ao.adviceFunc=_1[3]; }else{ if((dl.isString(_1[0]))&&(dl.isObject(_1[1]))&&(dl.isString(_1[2]))&&(dl.isFunction(_1[3]))){ ao.srcObj=_1[1]; ao.srcFunc=_1[2]; var _5=dl.nameAnonFunc(_1[3],dj_global,_2); ao.adviceObj=dj_global; ao.adviceFunc=_5; }else{ if(dl.isObject(_1[1])){ ao.srcObj=_1[1]; ao.srcFunc=_1[2]; ao.adviceObj=dj_global; ao.adviceFunc=_1[3]; }else{ if(dl.isObject(_1[2])){ ao.srcObj=dj_global; ao.srcFunc=_1[1]; ao.adviceObj=_1[2]; ao.adviceFunc=_1[3]; }else{ ao.srcObj=ao.adviceObj=ao.aroundObj=dj_global; ao.srcFunc=_1[1]; ao.adviceFunc=_1[2]; ao.aroundFunc=_1[3]; } } } } } } break; case 6: ao.srcObj=_1[1]; ao.srcFunc=_1[2]; ao.adviceObj=_1[3]; ao.adviceFunc=_1[4]; ao.aroundFunc=_1[5]; ao.aroundObj=dj_global; break; default: ao.srcObj=_1[1]; ao.srcFunc=_1[2]; ao.adviceObj=_1[3]; ao.adviceFunc=_1[4]; ao.aroundObj=_1[5]; ao.aroundFunc=_1[6]; ao.once=_1[7]; ao.delay=_1[8]; ao.rate=_1[9]; ao.adviceMsg=_1[10]; ao.maxCalls=(!isNaN(parseInt(_1[11])))?_1[11]:-1; break; } if(dl.isFunction(ao.aroundFunc)){ var _5=dl.nameAnonFunc(ao.aroundFunc,ao.aroundObj,_2); ao.aroundFunc=_5; } if(dl.isFunction(ao.srcFunc)){ ao.srcFunc=dl.getNameInObj(ao.srcObj,ao.srcFunc); } if(dl.isFunction(ao.adviceFunc)){ ao.adviceFunc=dl.getNameInObj(ao.adviceObj,ao.adviceFunc); } if((ao.aroundObj)&&(dl.isFunction(ao.aroundFunc))){ ao.aroundFunc=dl.getNameInObj(ao.aroundObj,ao.aroundFunc); } if(!ao.srcObj){ dojo.raise("bad srcObj for srcFunc: "+ao.srcFunc); } if(!ao.adviceObj){ dojo.raise("bad adviceObj for adviceFunc: "+ao.adviceFunc); } if(!ao.adviceFunc){ dojo.debug("bad adviceFunc for srcFunc: "+ao.srcFunc); dojo.debugShallow(ao); } return ao; } this.connect=function(){ if(arguments.length==1){ var ao=arguments[0]; }else{ var ao=interpolateArgs(arguments,true); } if(dojo.lang.isString(ao.srcFunc)&&(ao.srcFunc.toLowerCase()=="onkey")){ if(dojo.render.html.ie){ ao.srcFunc="onkeydown"; this.connect(ao); } ao.srcFunc="onkeypress"; } if(dojo.lang.isArray(ao.srcObj)&&ao.srcObj!=""){ var _7={}; for(var x in ao){ _7[x]=ao[x]; } var _9=[]; dojo.lang.forEach(ao.srcObj,function(_a){ if((dojo.render.html.capable)&&(dojo.lang.isString(_a))){ _a=dojo.byId(_a); } _7.srcObj=_a; _9.push(dojo.event.connect.call(dojo.event,_7)); }); return _9; } var _b=dojo.event.MethodJoinPoint.getForMethod(ao.srcObj,ao.srcFunc); if(ao.adviceFunc){ var _c=dojo.event.MethodJoinPoint.getForMethod(ao.adviceObj,ao.adviceFunc); } _b.kwAddAdvice(ao); return _b; }; this.log=function(a1,a2){ var _f; if((arguments.length==1)&&(typeof a1=="object")){ _f=a1; }else{ _f={srcObj:a1,srcFunc:a2}; } _f.adviceFunc=function(){ var _10=[]; for(var x=0;x=this.jp_.around.length){ return this.jp_.object[this.jp_.methodname].apply(this.jp_.object,this.args); }else{ var ti=this.jp_.around[this.around_index]; var _25=ti[0]||dj_global; var _26=ti[1]; return _25[_26].call(_25,this); } }; dojo.event.MethodJoinPoint=function(obj,_28){ this.object=obj||dj_global; this.methodname=_28; this.methodfunc=this.object[_28]; this.squelch=false; }; dojo.event.MethodJoinPoint.getForMethod=function(obj,_2a){ if(!obj){ obj=dj_global; } var ofn=obj[_2a]; if(!ofn){ ofn=obj[_2a]=function(){ }; if(!obj[_2a]){ dojo.raise("Cannot set do-nothing method on that object "+_2a); } }else{ if((typeof ofn!="function")&&(!dojo.lang.isFunction(ofn))&&(!dojo.lang.isAlien(ofn))){ return null; } } var _2c=_2a+"$joinpoint"; var _2d=_2a+"$joinpoint$method"; var _2e=obj[_2c]; if(!_2e){ var _2f=false; if(dojo.event["browser"]){ if((obj["attachEvent"])||(obj["nodeType"])||(obj["addEventListener"])){ _2f=true; dojo.event.browser.addClobberNodeAttrs(obj,[_2c,_2d,_2a]); } } var _30=ofn.length; obj[_2d]=ofn; _2e=obj[_2c]=new dojo.event.MethodJoinPoint(obj,_2d); if(!_2f){ obj[_2a]=function(){ return _2e.run.apply(_2e,arguments); }; }else{ obj[_2a]=function(){ var _31=[]; if(!arguments.length){ var evt=null; try{ if(obj.ownerDocument){ evt=obj.ownerDocument.parentWindow.event; }else{ if(obj.documentElement){ evt=obj.documentElement.ownerDocument.parentWindow.event; }else{ if(obj.event){ evt=obj.event; }else{ evt=window.event; } } } } catch(e){ evt=window.event; } if(evt){ _31.push(dojo.event.browser.fixEvent(evt,this)); } }else{ for(var x=0;x-1){ if(_3f==0){ return; } _39[7]--; } var _40; var to={args:[],jp_:this,object:obj,proceed:function(){ return _3a[_3b].apply(_3a,to.args); }}; to.args=_36; var _42=parseInt(_39[4]); var _43=((!isNaN(_42))&&(_39[4]!==null)&&(typeof _39[4]!="undefined")); if(_39[5]){ var _44=parseInt(_39[5]); var cur=new Date(); var _46=false; if((_39["last"])&&((cur-_39.last)<=_44)){ if(dojo.event._canTimeout){ if(_39["delayTimer"]){ clearTimeout(_39.delayTimer); } var tod=parseInt(_44*2); var _48=dojo.lang.shallowCopy(_39); _39.delayTimer=setTimeout(function(){ _48[5]=0; _38(_48); },tod); } return; }else{ _39.last=cur; } } if(_3d){ _3c[_3d].call(_3c,to); }else{ if((_43)&&((dojo.render.html)||(dojo.render.svg))){ dj_global["setTimeout"](function(){ if(msg){ _3a[_3b].call(_3a,to); }else{ _3a[_3b].apply(_3a,_35); } },_42); }else{ if(msg){ _3a[_3b].call(_3a,to); }else{ _3a[_3b].apply(_3a,_35); } } } }; var _49=function(){ if(this.squelch){ try{ return _38.apply(this,arguments); } catch(e){ dojo.debug(e); } }else{ return _38.apply(this,arguments); } }; if((this["before"])&&(this.before.length>0)){ dojo.lang.forEach(this.before.concat(new Array()),_49); } var _4a; try{ if((this["around"])&&(this.around.length>0)){ var mi=new dojo.event.MethodInvocation(this,obj,_35); _4a=mi.proceed(); }else{ if(this.methodfunc){ _4a=this.object[this.methodname].apply(this.object,_35); } } } catch(e){ if(!this.squelch){ dojo.debug(e,"when calling",this.methodname,"on",this.object,"with arguments",_35); dojo.raise(e); } } if((this["after"])&&(this.after.length>0)){ dojo.lang.forEach(this.after.concat(new Array()),_49); } return (this.methodfunc)?_4a:null; },getArr:function(_4c){ var _4d="after"; if((typeof _4c=="string")&&(_4c.indexOf("before")!=-1)){ _4d="before"; }else{ if(_4c=="around"){ _4d="around"; } } if(!this[_4d]){ this[_4d]=[]; } return this[_4d]; },kwAddAdvice:function(_4e){ this.addAdvice(_4e["adviceObj"],_4e["adviceFunc"],_4e["aroundObj"],_4e["aroundFunc"],_4e["adviceType"],_4e["precedence"],_4e["once"],_4e["delay"],_4e["rate"],_4e["adviceMsg"],_4e["maxCalls"]); },addAdvice:function(_4f,_50,_51,_52,_53,_54,_55,_56,_57,_58,_59){ var arr=this.getArr(_53); if(!arr){ dojo.raise("bad this: "+this); } var ao=[_4f,_50,_51,_52,_56,_57,_58,_59]; if(_55){ if(this.hasAdvice(_4f,_50,_53,arr)>=0){ return; } } if(_54=="first"){ arr.unshift(ao); }else{ arr.push(ao); } },hasAdvice:function(_5c,_5d,_5e,arr){ if(!arr){ arr=this.getArr(_5e); } var ind=-1; for(var x=0;x