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.
148 lines
3.0 KiB
148 lines
3.0 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.behavior"); |
|
dojo.require("dojo.event.*"); |
|
dojo.require("dojo.experimental"); |
|
dojo.experimental("dojo.behavior"); |
|
dojo.behavior=new function(){ |
|
function arrIn(_1,_2){ |
|
if(!_1[_2]){ |
|
_1[_2]=[]; |
|
} |
|
return _1[_2]; |
|
} |
|
function forIn(_3,_4,_5){ |
|
var _6={}; |
|
for(var x in _3){ |
|
if(typeof _6[x]=="undefined"){ |
|
if(!_5){ |
|
_4(_3[x],x); |
|
}else{ |
|
_5.call(_4,_3[x],x); |
|
} |
|
} |
|
} |
|
} |
|
this.behaviors={}; |
|
this.add=function(_8){ |
|
var _9={}; |
|
forIn(_8,this,function(_a,_b){ |
|
var _c=arrIn(this.behaviors,_b); |
|
if((dojo.lang.isString(_a))||(dojo.lang.isFunction(_a))){ |
|
_a={found:_a}; |
|
} |
|
forIn(_a,function(_d,_e){ |
|
arrIn(_c,_e).push(_d); |
|
}); |
|
}); |
|
}; |
|
this.apply=function(){ |
|
dojo.profile.start("dojo.behavior.apply"); |
|
var r=dojo.render.html; |
|
var _10=(!r.safari); |
|
if(r.safari){ |
|
var uas=r.UA.split("AppleWebKit/")[1]; |
|
if(parseInt(uas.match(/[0-9.]{3,}/))>=420){ |
|
_10=true; |
|
} |
|
} |
|
if((dj_undef("behaviorFastParse",djConfig)?(_10):djConfig["behaviorFastParse"])){ |
|
this.applyFast(); |
|
}else{ |
|
this.applySlow(); |
|
} |
|
dojo.profile.end("dojo.behavior.apply"); |
|
}; |
|
this.matchCache={}; |
|
this.elementsById=function(id,_13){ |
|
var _14=[]; |
|
var _15=[]; |
|
arrIn(this.matchCache,id); |
|
if(_13){ |
|
var _16=this.matchCache[id]; |
|
for(var x=0;x<_16.length;x++){ |
|
if(_16[x].id!=""){ |
|
_14.push(_16[x]); |
|
_16.splice(x,1); |
|
x--; |
|
} |
|
} |
|
} |
|
var _18=dojo.byId(id); |
|
while(_18){ |
|
if(!_18["idcached"]){ |
|
_15.push(_18); |
|
} |
|
_18.id=""; |
|
_18=dojo.byId(id); |
|
} |
|
this.matchCache[id]=this.matchCache[id].concat(_15); |
|
dojo.lang.forEach(this.matchCache[id],function(_19){ |
|
_19.id=id; |
|
_19.idcached=true; |
|
}); |
|
return {"removed":_14,"added":_15,"match":this.matchCache[id]}; |
|
}; |
|
this.applyToNode=function(_1a,_1b,_1c){ |
|
if(typeof _1b=="string"){ |
|
dojo.event.topic.registerPublisher(_1b,_1a,_1c); |
|
}else{ |
|
if(typeof _1b=="function"){ |
|
if(_1c=="found"){ |
|
_1b(_1a); |
|
}else{ |
|
dojo.event.connect(_1a,_1c,_1b); |
|
} |
|
}else{ |
|
_1b.srcObj=_1a; |
|
_1b.srcFunc=_1c; |
|
dojo.event.kwConnect(_1b); |
|
} |
|
} |
|
}; |
|
this.applyFast=function(){ |
|
dojo.profile.start("dojo.behavior.applyFast"); |
|
forIn(this.behaviors,function(_1d,id){ |
|
var _1f=dojo.behavior.elementsById(id); |
|
dojo.lang.forEach(_1f.added,function(_20){ |
|
forIn(_1d,function(_21,_22){ |
|
if(dojo.lang.isArray(_21)){ |
|
dojo.lang.forEach(_21,function(_23){ |
|
dojo.behavior.applyToNode(_20,_23,_22); |
|
}); |
|
} |
|
}); |
|
}); |
|
}); |
|
dojo.profile.end("dojo.behavior.applyFast"); |
|
}; |
|
this.applySlow=function(){ |
|
dojo.profile.start("dojo.behavior.applySlow"); |
|
var all=document.getElementsByTagName("*"); |
|
var _25=all.length; |
|
for(var x=0;x<_25;x++){ |
|
var _27=all[x]; |
|
if((_27.id)&&(!_27["behaviorAdded"])&&(this.behaviors[_27.id])){ |
|
_27["behaviorAdded"]=true; |
|
forIn(this.behaviors[_27.id],function(_28,_29){ |
|
if(dojo.lang.isArray(_28)){ |
|
dojo.lang.forEach(_28,function(_2a){ |
|
dojo.behavior.applyToNode(_27,_2a,_29); |
|
}); |
|
} |
|
}); |
|
} |
|
} |
|
dojo.profile.end("dojo.behavior.applySlow"); |
|
}; |
|
}; |
|
dojo.addOnLoad(dojo.behavior,"apply");
|
|
|