root / trunk / web / dojo / dojox / dtl / dom.js @ 12
History | View | Annotate | Download (18.1 KB)
| 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["dojox.dtl.dom"]){ |
| 9 |
dojo._hasResource["dojox.dtl.dom"]=true; |
| 10 |
dojo.provide("dojox.dtl.dom");
|
| 11 |
dojo.require("dojox.dtl._base");
|
| 12 |
dojo.require("dojox.dtl.Context");
|
| 13 |
(function(){
|
| 14 |
var dd=dojox.dtl;
|
| 15 |
dd.BOOLS={checked:1,disabled:1,readonly:1};
|
| 16 |
dd.TOKEN_CHANGE=-11;
|
| 17 |
dd.TOKEN_ATTR=-12;
|
| 18 |
dd.TOKEN_CUSTOM=-13;
|
| 19 |
dd.TOKEN_NODE=1;
|
| 20 |
var _1=dd.text;
|
| 21 |
var _2=dd.dom={_attributes:{},_uppers:{},_re4:/^function anonymous\(\)\s*{\s*(.*)\s*}$/,_reTrim:/(?:^[\n\s]*(\{%)?\s*|\s*(%\})?[\n\s]*$)/g,_reSplit:/\s*%\}[\n\s]*\{%\s*/g,getTemplate:function(_3){ |
| 22 |
if(typeof this._commentable=="undefined"){ |
| 23 |
this._commentable=false; |
| 24 |
var _4=document.createElement("div"); |
| 25 |
_4.innerHTML="<!--Test comment handling, and long comments, using comments whenever possible.-->";
|
| 26 |
if(_4.childNodes.length&&_4.childNodes[0].nodeType==8&&_4.childNodes[0].data=="comment"){ |
| 27 |
this._commentable=true; |
| 28 |
} |
| 29 |
} |
| 30 |
if(!this._commentable){ |
| 31 |
_3=_3.replace(/<!--({({|%).*?(%|})})-->/g,"$1"); |
| 32 |
} |
| 33 |
if(dojo.isIE){
|
| 34 |
_3=_3.replace(/\b(checked|disabled|readonly|style)="/g,"t$1=\""); |
| 35 |
} |
| 36 |
_3=_3.replace(/\bstyle="/g,"tstyle=\""); |
| 37 |
var _5;
|
| 38 |
var _6=dojo.isWebKit;
|
| 39 |
var _7=[[true,"select","option"],[_6,"tr","td|th"],[_6,"thead","tr","th"],[_6,"tbody","tr","td"],[_6,"table","tbody|thead|tr","tr","td"]]; |
| 40 |
var _8=[];
|
| 41 |
for(var i=0,_9;_9=_7[i];i++){ |
| 42 |
if(!_9[0]){ |
| 43 |
continue;
|
| 44 |
} |
| 45 |
if(_3.indexOf("<"+_9[1])!=-1){ |
| 46 |
var _a=new RegExp("<"+_9[1]+"(?:.|\n)*?>((?:.|\n)+?)</"+_9[1]+">","ig"); |
| 47 |
tagLoop: |
| 48 |
while(_5=_a.exec(_3)){
|
| 49 |
var _b=_9[2].split("|"); |
| 50 |
var _c=[];
|
| 51 |
for(var j=0,_d;_d=_b[j];j++){ |
| 52 |
_c.push("<"+_d+"(?:.|\n)*?>(?:.|\n)*?</"+_d+">"); |
| 53 |
} |
| 54 |
var _e=[];
|
| 55 |
var _f=dojox.string.tokenize(_5[1],new RegExp("("+_c.join("|")+")","ig"),function(_10){ |
| 56 |
var tag=/<(\w+)/.exec(_10)[1]; |
| 57 |
if(!_e[tag]){
|
| 58 |
_e[tag]=true;
|
| 59 |
_e.push(tag); |
| 60 |
} |
| 61 |
return {data:_10}; |
| 62 |
}); |
| 63 |
if(_e.length){
|
| 64 |
var tag=(_e.length==1)?_e[0]:_9[2].split("|")[0]; |
| 65 |
var _11=[];
|
| 66 |
for(var j=0,jl=_f.length;j<jl;j++){ |
| 67 |
var _12=_f[j];
|
| 68 |
if(dojo.isObject(_12)){
|
| 69 |
_11.push(_12.data); |
| 70 |
}else{
|
| 71 |
var _13=_12.replace(this._reTrim,""); |
| 72 |
if(!_13){
|
| 73 |
continue;
|
| 74 |
} |
| 75 |
_12=_13.split(this._reSplit);
|
| 76 |
for(var k=0,kl=_12.length;k<kl;k++){ |
| 77 |
var _14=""; |
| 78 |
for(var p=2,pl=_9.length;p<pl;p++){ |
| 79 |
if(p==2){ |
| 80 |
_14+="<"+tag+" dtlinstruction=\"{% "+_12[k].replace("\"","\\\"")+" %}\">"; |
| 81 |
}else{
|
| 82 |
if(tag==_9[p]){
|
| 83 |
continue;
|
| 84 |
}else{
|
| 85 |
_14+="<"+_9[p]+">"; |
| 86 |
} |
| 87 |
} |
| 88 |
} |
| 89 |
_14+="DTL";
|
| 90 |
for(var p=_9.length-1;p>1;p--){ |
| 91 |
if(p==2){ |
| 92 |
_14+="</"+tag+">"; |
| 93 |
}else{
|
| 94 |
if(tag==_9[p]){
|
| 95 |
continue;
|
| 96 |
}else{
|
| 97 |
_14+="</"+_9[p]+">"; |
| 98 |
} |
| 99 |
} |
| 100 |
} |
| 101 |
_11.push("ÿ"+_8.length);
|
| 102 |
_8.push(_14); |
| 103 |
} |
| 104 |
} |
| 105 |
} |
| 106 |
_3=_3.replace(_5[1],_11.join("")); |
| 107 |
} |
| 108 |
} |
| 109 |
} |
| 110 |
} |
| 111 |
for(var i=_8.length;i--;){ |
| 112 |
_3=_3.replace("ÿ"+i,_8[i]);
|
| 113 |
} |
| 114 |
var re=/\b([a-zA-Z_:][a-zA-Z0-9_\-\.:]*)=['"]/g; |
| 115 |
while(_5=re.exec(_3)){
|
| 116 |
var _15=_5[1].toLowerCase(); |
| 117 |
if(_15=="dtlinstruction"){ |
| 118 |
continue;
|
| 119 |
} |
| 120 |
if(_15!=_5[1]){ |
| 121 |
this._uppers[_15]=_5[1]; |
| 122 |
} |
| 123 |
this._attributes[_15]=true; |
| 124 |
} |
| 125 |
var _4=document.createElement("div"); |
| 126 |
_4.innerHTML=_3; |
| 127 |
var _16={nodes:[]}; |
| 128 |
while(_4.childNodes.length){
|
| 129 |
_16.nodes.push(_4.removeChild(_4.childNodes[0]));
|
| 130 |
} |
| 131 |
return _16;
|
| 132 |
},tokenize:function(_17){ |
| 133 |
var _18=[];
|
| 134 |
for(var i=0,_19;_19=_17[i++];){ |
| 135 |
if(_19.nodeType!=1){ |
| 136 |
this.__tokenize(_19,_18);
|
| 137 |
}else{
|
| 138 |
this._tokenize(_19,_18);
|
| 139 |
} |
| 140 |
} |
| 141 |
return _18;
|
| 142 |
},_swallowed:[],_tokenize:function(_1a,_1b){ |
| 143 |
var _1c=false; |
| 144 |
var _1d=this._swallowed; |
| 145 |
var i,j,tag,_1e;
|
| 146 |
if(!_1b.first){
|
| 147 |
_1c=_1b.first=true;
|
| 148 |
var _1f=dd.register.getAttributeTags();
|
| 149 |
for(i=0;tag=_1f[i];i++){ |
| 150 |
try{
|
| 151 |
(tag[2])({swallowNode:function(){ |
| 152 |
throw 1; |
| 153 |
}},new dd.Token(dd.TOKEN_ATTR,"")); |
| 154 |
} |
| 155 |
catch(e){
|
| 156 |
_1d.push(tag); |
| 157 |
} |
| 158 |
} |
| 159 |
} |
| 160 |
for(i=0;tag=_1d[i];i++){ |
| 161 |
var _20=_1a.getAttribute(tag[0]); |
| 162 |
if(_20){
|
| 163 |
var _1d=false; |
| 164 |
var _21=(tag[2])({swallowNode:function(){ |
| 165 |
_1d=true;
|
| 166 |
return _1a;
|
| 167 |
}},new dd.Token(dd.TOKEN_ATTR,tag[0]+" "+_20)); |
| 168 |
if(_1d){
|
| 169 |
if(_1a.parentNode&&_1a.parentNode.removeChild){
|
| 170 |
_1a.parentNode.removeChild(_1a); |
| 171 |
} |
| 172 |
_1b.push([dd.TOKEN_CUSTOM,_21]); |
| 173 |
return;
|
| 174 |
} |
| 175 |
} |
| 176 |
} |
| 177 |
var _22=[];
|
| 178 |
if(dojo.isIE&&_1a.tagName=="SCRIPT"){ |
| 179 |
_22.push({nodeType:3,data:_1a.text});
|
| 180 |
_1a.text="";
|
| 181 |
}else{
|
| 182 |
for(i=0;_1e=_1a.childNodes[i];i++){ |
| 183 |
_22.push(_1e); |
| 184 |
} |
| 185 |
} |
| 186 |
_1b.push([dd.TOKEN_NODE,_1a]); |
| 187 |
var _23=false; |
| 188 |
if(_22.length){
|
| 189 |
_1b.push([dd.TOKEN_CHANGE,_1a]); |
| 190 |
_23=true;
|
| 191 |
} |
| 192 |
for(var key in this._attributes){ |
| 193 |
var _24=false; |
| 194 |
var _25=""; |
| 195 |
if(key=="class"){ |
| 196 |
_25=_1a.className||_25; |
| 197 |
}else{
|
| 198 |
if(key=="for"){ |
| 199 |
_25=_1a.htmlFor||_25; |
| 200 |
}else{
|
| 201 |
if(key=="value"&&_1a.value==_1a.innerHTML){ |
| 202 |
continue;
|
| 203 |
}else{
|
| 204 |
if(_1a.getAttribute){
|
| 205 |
_25=_1a.getAttribute(key,2)||_25;
|
| 206 |
if(key=="href"||key=="src"){ |
| 207 |
if(dojo.isIE){
|
| 208 |
var _26=location.href.lastIndexOf(location.hash);
|
| 209 |
var _27=location.href.substring(0,_26).split("/"); |
| 210 |
_27.pop(); |
| 211 |
_27=_27.join("/")+"/"; |
| 212 |
if(_25.indexOf(_27)==0){ |
| 213 |
_25=_25.replace(_27,"");
|
| 214 |
} |
| 215 |
_25=decodeURIComponent(_25); |
| 216 |
} |
| 217 |
}else{
|
| 218 |
if(key=="tstyle"){ |
| 219 |
_24=key; |
| 220 |
key="style";
|
| 221 |
}else{
|
| 222 |
if(dd.BOOLS[key.slice(1)]&&dojo.trim(_25)){ |
| 223 |
key=key.slice(1);
|
| 224 |
}else{
|
| 225 |
if(this._uppers[key]&&dojo.trim(_25)){ |
| 226 |
_24=this._uppers[key];
|
| 227 |
} |
| 228 |
} |
| 229 |
} |
| 230 |
} |
| 231 |
} |
| 232 |
} |
| 233 |
} |
| 234 |
} |
| 235 |
if(_24){
|
| 236 |
_1a.setAttribute(_24,"");
|
| 237 |
_1a.removeAttribute(_24); |
| 238 |
} |
| 239 |
if(typeof _25=="function"){ |
| 240 |
_25=_25.toString().replace(this._re4,"$1"); |
| 241 |
} |
| 242 |
if(!_23){
|
| 243 |
_1b.push([dd.TOKEN_CHANGE,_1a]); |
| 244 |
_23=true;
|
| 245 |
} |
| 246 |
_1b.push([dd.TOKEN_ATTR,_1a,key,_25]); |
| 247 |
} |
| 248 |
for(i=0,_1e;_1e=_22[i];i++){ |
| 249 |
if(_1e.nodeType==1){ |
| 250 |
var _28=_1e.getAttribute("dtlinstruction"); |
| 251 |
if(_28){
|
| 252 |
_1e.parentNode.removeChild(_1e); |
| 253 |
_1e={nodeType:8,data:_28};
|
| 254 |
} |
| 255 |
} |
| 256 |
this.__tokenize(_1e,_1b);
|
| 257 |
} |
| 258 |
if(!_1c&&_1a.parentNode&&_1a.parentNode.tagName){
|
| 259 |
if(_23){
|
| 260 |
_1b.push([dd.TOKEN_CHANGE,_1a,true]);
|
| 261 |
} |
| 262 |
_1b.push([dd.TOKEN_CHANGE,_1a.parentNode]); |
| 263 |
_1a.parentNode.removeChild(_1a); |
| 264 |
}else{
|
| 265 |
_1b.push([dd.TOKEN_CHANGE,_1a,true,true]); |
| 266 |
} |
| 267 |
},__tokenize:function(_29,_2a){ |
| 268 |
var _2b=_29.data;
|
| 269 |
switch(_29.nodeType){
|
| 270 |
case 1: |
| 271 |
this._tokenize(_29,_2a);
|
| 272 |
return;
|
| 273 |
case 3: |
| 274 |
if(_2b.match(/[^\s\n]/)&&(_2b.indexOf("{{")!=-1||_2b.indexOf("{%")!=-1)){ |
| 275 |
var _2c=_1.tokenize(_2b);
|
| 276 |
for(var j=0,_2d;_2d=_2c[j];j++){ |
| 277 |
if(typeof _2d=="string"){ |
| 278 |
_2a.push([dd.TOKEN_TEXT,_2d]); |
| 279 |
}else{
|
| 280 |
_2a.push(_2d); |
| 281 |
} |
| 282 |
} |
| 283 |
}else{
|
| 284 |
_2a.push([_29.nodeType,_29]); |
| 285 |
} |
| 286 |
if(_29.parentNode){
|
| 287 |
_29.parentNode.removeChild(_29); |
| 288 |
} |
| 289 |
return;
|
| 290 |
case 8: |
| 291 |
if(_2b.indexOf("{%")==0){ |
| 292 |
var _2d=dojo.trim(_2b.slice(2,-2)); |
| 293 |
if(_2d.substr(0,5)=="load "){ |
| 294 |
var _2e=dojo.trim(_2d).split(/\s+/g); |
| 295 |
for(var i=1,_2f;_2f=_2e[i];i++){ |
| 296 |
dojo["require"](_2f);
|
| 297 |
} |
| 298 |
} |
| 299 |
_2a.push([dd.TOKEN_BLOCK,_2d]); |
| 300 |
} |
| 301 |
if(_2b.indexOf("{{")==0){ |
| 302 |
_2a.push([dd.TOKEN_VAR,dojo.trim(_2b.slice(2,-2))]); |
| 303 |
} |
| 304 |
if(_29.parentNode){
|
| 305 |
_29.parentNode.removeChild(_29); |
| 306 |
} |
| 307 |
return;
|
| 308 |
} |
| 309 |
}}; |
| 310 |
dd.DomTemplate=dojo.extend(function(obj){
|
| 311 |
if(!obj.nodes){
|
| 312 |
var _30=dojo.byId(obj);
|
| 313 |
if(_30&&_30.nodeType==1){ |
| 314 |
dojo.forEach(["class","src","href","name","value"],function(_31){ |
| 315 |
_2._attributes[_31]=true;
|
| 316 |
}); |
| 317 |
obj={nodes:[_30]};
|
| 318 |
}else{
|
| 319 |
if(typeof obj=="object"){ |
| 320 |
obj=_1.getTemplateString(obj); |
| 321 |
} |
| 322 |
obj=_2.getTemplate(obj); |
| 323 |
} |
| 324 |
} |
| 325 |
var _32=_2.tokenize(obj.nodes);
|
| 326 |
if(dd.tests){
|
| 327 |
this.tokens=_32.slice(0); |
| 328 |
} |
| 329 |
var _33=new dd._DomParser(_32); |
| 330 |
this.nodelist=_33.parse();
|
| 331 |
},{_count:0,_re:/\bdojo:([a-zA-Z0-9_]+)\b/g,setClass:function(str){
|
| 332 |
this.getRootNode().className=str;
|
| 333 |
},getRootNode:function(){ |
| 334 |
return this.buffer.rootNode; |
| 335 |
},getBuffer:function(){ |
| 336 |
return new dd.DomBuffer(); |
| 337 |
},render:function(_34,_35){ |
| 338 |
_35=this.buffer=_35||this.getBuffer(); |
| 339 |
this.rootNode=null; |
| 340 |
var _36=this.nodelist.render(_34||new dd.Context({}),_35); |
| 341 |
for(var i=0,_37;_37=_35._cache[i];i++){ |
| 342 |
if(_37._cache){
|
| 343 |
_37._cache.length=0;
|
| 344 |
} |
| 345 |
} |
| 346 |
return _36;
|
| 347 |
},unrender:function(_38,_39){ |
| 348 |
return this.nodelist.unrender(_38,_39); |
| 349 |
}}); |
| 350 |
dd.DomBuffer=dojo.extend(function(_3a){
|
| 351 |
this._parent=_3a;
|
| 352 |
this._cache=[];
|
| 353 |
},{concat:function(_3b){
|
| 354 |
var _3c=this._parent; |
| 355 |
if(_3c&&_3b.parentNode&&_3b.parentNode===_3c&&!_3c._dirty){
|
| 356 |
return this; |
| 357 |
} |
| 358 |
if(_3b.nodeType==1&&!this.rootNode){ |
| 359 |
this.rootNode=_3b||true; |
| 360 |
return this; |
| 361 |
} |
| 362 |
if(!_3c){
|
| 363 |
if(_3b.nodeType==3&&dojo.trim(_3b.data)){ |
| 364 |
throw new Error("Text should not exist outside of the root node in template"); |
| 365 |
} |
| 366 |
return this; |
| 367 |
} |
| 368 |
if(this._closed){ |
| 369 |
if(_3b.nodeType==3&&!dojo.trim(_3b.data)){ |
| 370 |
return this; |
| 371 |
}else{
|
| 372 |
throw new Error("Content should not exist outside of the root node in template"); |
| 373 |
} |
| 374 |
} |
| 375 |
if(_3c._dirty){
|
| 376 |
if(_3b._drawn&&_3b.parentNode==_3c){
|
| 377 |
var _3d=_3c._cache;
|
| 378 |
if(_3d){
|
| 379 |
for(var i=0,_3e;_3e=_3d[i];i++){ |
| 380 |
this.onAddNode&&this.onAddNode(_3e); |
| 381 |
_3c.insertBefore(_3e,_3b); |
| 382 |
this.onAddNodeComplete&&this.onAddNodeComplete(_3e); |
| 383 |
} |
| 384 |
_3d.length=0;
|
| 385 |
} |
| 386 |
} |
| 387 |
_3c._dirty=false;
|
| 388 |
} |
| 389 |
if(!_3c._cache){
|
| 390 |
_3c._cache=[]; |
| 391 |
this._cache.push(_3c);
|
| 392 |
} |
| 393 |
_3c._dirty=true;
|
| 394 |
_3c._cache.push(_3b); |
| 395 |
return this; |
| 396 |
},remove:function(obj){ |
| 397 |
if(typeof obj=="string"){ |
| 398 |
if(this._parent){ |
| 399 |
this._parent.removeAttribute(obj);
|
| 400 |
} |
| 401 |
}else{
|
| 402 |
if(obj.nodeType==1&&!this.getRootNode()&&!this._removed){ |
| 403 |
this._removed=true; |
| 404 |
return this; |
| 405 |
} |
| 406 |
if(obj.parentNode){
|
| 407 |
this.onRemoveNode&&this.onRemoveNode(obj); |
| 408 |
if(obj.parentNode){
|
| 409 |
obj.parentNode.removeChild(obj); |
| 410 |
} |
| 411 |
} |
| 412 |
} |
| 413 |
return this; |
| 414 |
},setAttribute:function(key,_3f){ |
| 415 |
var old=dojo.attr(this._parent,key); |
| 416 |
if(this.onChangeAttribute&&old!=_3f){ |
| 417 |
this.onChangeAttribute(this._parent,key,old,_3f); |
| 418 |
} |
| 419 |
if(key=="style"){ |
| 420 |
this._parent.style.cssText=_3f;
|
| 421 |
}else{
|
| 422 |
dojo.attr(this._parent,key,_3f);
|
| 423 |
} |
| 424 |
return this; |
| 425 |
},addEvent:function(_40,_41,fn,_42){ |
| 426 |
if(!_40.getThis()){
|
| 427 |
throw new Error("You must use Context.setObject(instance)"); |
| 428 |
} |
| 429 |
this.onAddEvent&&this.onAddEvent(this.getParent(),_41,fn); |
| 430 |
var _43=fn;
|
| 431 |
if(dojo.isArray(_42)){
|
| 432 |
_43=function(e){ |
| 433 |
this[fn].apply(this,[e].concat(_42)); |
| 434 |
}; |
| 435 |
} |
| 436 |
return dojo.connect(this.getParent(),_41,_40.getThis(),_43); |
| 437 |
},setParent:function(_44,up,_45){ |
| 438 |
if(!this._parent){ |
| 439 |
this._parent=this._first=_44; |
| 440 |
} |
| 441 |
if(up&&_45&&_44===this._first){ |
| 442 |
this._closed=true; |
| 443 |
} |
| 444 |
if(up){
|
| 445 |
var _46=this._parent; |
| 446 |
var _47=""; |
| 447 |
var ie=dojo.isIE&&_46.tagName=="SCRIPT"; |
| 448 |
if(ie){
|
| 449 |
_46.text="";
|
| 450 |
} |
| 451 |
if(_46._dirty){
|
| 452 |
var _48=_46._cache;
|
| 453 |
var _49=(_46.tagName=="SELECT"&&!_46.options.length); |
| 454 |
for(var i=0,_4a;_4a=_48[i];i++){ |
| 455 |
if(_4a!==_46){
|
| 456 |
this.onAddNode&&this.onAddNode(_4a); |
| 457 |
if(ie){
|
| 458 |
_47+=_4a.data; |
| 459 |
}else{
|
| 460 |
_46.appendChild(_4a); |
| 461 |
if(_49&&_4a.defaultSelected&&i){
|
| 462 |
_49=i; |
| 463 |
} |
| 464 |
} |
| 465 |
this.onAddNodeComplete&&this.onAddNodeComplete(_4a); |
| 466 |
} |
| 467 |
} |
| 468 |
if(_49){
|
| 469 |
_46.options.selectedIndex=(typeof _49=="number")?_49:0; |
| 470 |
} |
| 471 |
_48.length=0;
|
| 472 |
_46._dirty=false;
|
| 473 |
} |
| 474 |
if(ie){
|
| 475 |
_46.text=_47; |
| 476 |
} |
| 477 |
} |
| 478 |
this._parent=_44;
|
| 479 |
this.onSetParent&&this.onSetParent(_44,up,_45); |
| 480 |
return this; |
| 481 |
},getParent:function(){ |
| 482 |
return this._parent; |
| 483 |
},getRootNode:function(){ |
| 484 |
return this.rootNode; |
| 485 |
}}); |
| 486 |
dd._DomNode=dojo.extend(function(_4b){
|
| 487 |
this.contents=_4b;
|
| 488 |
},{render:function(_4c,_4d){
|
| 489 |
this._rendered=true; |
| 490 |
return _4d.concat(this.contents); |
| 491 |
},unrender:function(_4e,_4f){ |
| 492 |
if(!this._rendered){ |
| 493 |
return _4f;
|
| 494 |
} |
| 495 |
this._rendered=false; |
| 496 |
return _4f.remove(this.contents); |
| 497 |
},clone:function(_50){ |
| 498 |
return new this.constructor(this.contents); |
| 499 |
}}); |
| 500 |
dd._DomNodeList=dojo.extend(function(_51){
|
| 501 |
this.contents=_51||[];
|
| 502 |
},{push:function(_52){
|
| 503 |
this.contents.push(_52);
|
| 504 |
},unshift:function(_53){ |
| 505 |
this.contents.unshift(_53);
|
| 506 |
},render:function(_54,_55,_56){ |
| 507 |
_55=_55||dd.DomTemplate.prototype.getBuffer(); |
| 508 |
if(_56){
|
| 509 |
var _57=_55.getParent();
|
| 510 |
} |
| 511 |
for(var i=0;i<this.contents.length;i++){ |
| 512 |
_55=this.contents[i].render(_54,_55);
|
| 513 |
if(!_55){
|
| 514 |
throw new Error("Template node render functions must return their buffer"); |
| 515 |
} |
| 516 |
} |
| 517 |
if(_57){
|
| 518 |
_55.setParent(_57); |
| 519 |
} |
| 520 |
return _55;
|
| 521 |
},dummyRender:function(_58,_59,_5a){ |
| 522 |
var div=document.createElement("div"); |
| 523 |
var _5b=_59.getParent();
|
| 524 |
var old=_5b._clone;
|
| 525 |
_5b._clone=div; |
| 526 |
var _5c=this.clone(_59,div); |
| 527 |
if(old){
|
| 528 |
_5b._clone=old; |
| 529 |
}else{
|
| 530 |
_5b._clone=null;
|
| 531 |
} |
| 532 |
_59=dd.DomTemplate.prototype.getBuffer(); |
| 533 |
_5c.unshift(new dd.ChangeNode(div));
|
| 534 |
_5c.unshift(new dd._DomNode(div));
|
| 535 |
_5c.push(new dd.ChangeNode(div,true)); |
| 536 |
_5c.render(_58,_59); |
| 537 |
if(_5a){
|
| 538 |
return _59.getRootNode();
|
| 539 |
} |
| 540 |
var _5d=div.innerHTML;
|
| 541 |
return (dojo.isIE)?_5d.replace(/\s*_(dirty|clone)="[^"]*"/g,""):_5d; |
| 542 |
},unrender:function(_5e,_5f,_60){ |
| 543 |
if(_60){
|
| 544 |
var _61=_5f.getParent();
|
| 545 |
} |
| 546 |
for(var i=0;i<this.contents.length;i++){ |
| 547 |
_5f=this.contents[i].unrender(_5e,_5f);
|
| 548 |
if(!_5f){
|
| 549 |
throw new Error("Template node render functions must return their buffer"); |
| 550 |
} |
| 551 |
} |
| 552 |
if(_61){
|
| 553 |
_5f.setParent(_61); |
| 554 |
} |
| 555 |
return _5f;
|
| 556 |
},clone:function(_62){ |
| 557 |
var _63=_62.getParent();
|
| 558 |
var _64=this.contents; |
| 559 |
var _65=new dd._DomNodeList(); |
| 560 |
var _66=[];
|
| 561 |
for(var i=0;i<_64.length;i++){ |
| 562 |
var _67=_64[i].clone(_62);
|
| 563 |
if(_67 instanceof dd.ChangeNode||_67 instanceof dd._DomNode){ |
| 564 |
var _68=_67.contents._clone;
|
| 565 |
if(_68){
|
| 566 |
_67.contents=_68; |
| 567 |
}else{
|
| 568 |
if(_63!=_67.contents&&_67 instanceof dd._DomNode){ |
| 569 |
var _69=_67.contents;
|
| 570 |
_67.contents=_67.contents.cloneNode(false);
|
| 571 |
_62.onClone&&_62.onClone(_69,_67.contents); |
| 572 |
_66.push(_69); |
| 573 |
_69._clone=_67.contents; |
| 574 |
} |
| 575 |
} |
| 576 |
} |
| 577 |
_65.push(_67); |
| 578 |
} |
| 579 |
for(var i=0,_67;_67=_66[i];i++){ |
| 580 |
_67._clone=null;
|
| 581 |
} |
| 582 |
return _65;
|
| 583 |
},rtrim:function(){ |
| 584 |
while(1){ |
| 585 |
var i=this.contents.length-1; |
| 586 |
if(this.contents[i] instanceof dd._DomTextNode&&this.contents[i].isEmpty()){ |
| 587 |
this.contents.pop();
|
| 588 |
}else{
|
| 589 |
break;
|
| 590 |
} |
| 591 |
} |
| 592 |
return this; |
| 593 |
}}); |
| 594 |
dd._DomVarNode=dojo.extend(function(str){
|
| 595 |
this.contents=new dd._Filter(str); |
| 596 |
},{render:function(_6a,_6b){
|
| 597 |
var str=this.contents.resolve(_6a); |
| 598 |
var _6c="text"; |
| 599 |
if(str){
|
| 600 |
if(str.render&&str.getRootNode){
|
| 601 |
_6c="injection";
|
| 602 |
}else{
|
| 603 |
if(str.safe){
|
| 604 |
if(str.nodeType){
|
| 605 |
_6c="node";
|
| 606 |
}else{
|
| 607 |
if(str.toString){
|
| 608 |
str=str.toString(); |
| 609 |
_6c="html";
|
| 610 |
} |
| 611 |
} |
| 612 |
} |
| 613 |
} |
| 614 |
} |
| 615 |
if(this._type&&_6c!=this._type){ |
| 616 |
this.unrender(_6a,_6b);
|
| 617 |
} |
| 618 |
this._type=_6c;
|
| 619 |
switch(_6c){
|
| 620 |
case "text": |
| 621 |
this._rendered=true; |
| 622 |
this._txt=this._txt||document.createTextNode(str); |
| 623 |
if(this._txt.data!=str){ |
| 624 |
var old=this._txt.data; |
| 625 |
this._txt.data=str;
|
| 626 |
_6b.onChangeData&&_6b.onChangeData(this._txt,old,this._txt.data); |
| 627 |
} |
| 628 |
return _6b.concat(this._txt); |
| 629 |
case "injection": |
| 630 |
var _6d=str.getRootNode();
|
| 631 |
if(this._rendered&&_6d!=this._root){ |
| 632 |
_6b=this.unrender(_6a,_6b);
|
| 633 |
} |
| 634 |
this._root=_6d;
|
| 635 |
var _6e=this._injected=new dd._DomNodeList(); |
| 636 |
_6e.push(new dd.ChangeNode(_6b.getParent()));
|
| 637 |
_6e.push(new dd._DomNode(_6d));
|
| 638 |
_6e.push(str); |
| 639 |
_6e.push(new dd.ChangeNode(_6b.getParent()));
|
| 640 |
this._rendered=true; |
| 641 |
return _6e.render(_6a,_6b);
|
| 642 |
case "node": |
| 643 |
this._rendered=true; |
| 644 |
if(this._node&&this._node!=str&&this._node.parentNode&&this._node.parentNode===_6b.getParent()){ |
| 645 |
this._node.parentNode.removeChild(this._node); |
| 646 |
} |
| 647 |
this._node=str;
|
| 648 |
return _6b.concat(str);
|
| 649 |
case "html": |
| 650 |
if(this._rendered&&this._src!=str){ |
| 651 |
_6b=this.unrender(_6a,_6b);
|
| 652 |
} |
| 653 |
this._src=str;
|
| 654 |
if(!this._rendered){ |
| 655 |
this._rendered=true; |
| 656 |
this._html=this._html||[]; |
| 657 |
var div=(this._div=this._div||document.createElement("div")); |
| 658 |
div.innerHTML=str; |
| 659 |
var _6f=div.childNodes;
|
| 660 |
while(_6f.length){
|
| 661 |
var _70=div.removeChild(_6f[0]); |
| 662 |
this._html.push(_70);
|
| 663 |
_6b=_6b.concat(_70); |
| 664 |
} |
| 665 |
} |
| 666 |
return _6b;
|
| 667 |
default:
|
| 668 |
return _6b;
|
| 669 |
} |
| 670 |
},unrender:function(_71,_72){ |
| 671 |
if(!this._rendered){ |
| 672 |
return _72;
|
| 673 |
} |
| 674 |
this._rendered=false; |
| 675 |
switch(this._type){ |
| 676 |
case "text": |
| 677 |
return _72.remove(this._txt); |
| 678 |
case "injection": |
| 679 |
return this._injection.unrender(_71,_72); |
| 680 |
case "node": |
| 681 |
if(this._node.parentNode===_72.getParent()){ |
| 682 |
return _72.remove(this._node); |
| 683 |
} |
| 684 |
return _72;
|
| 685 |
case "html": |
| 686 |
for(var i=0,l=this._html.length;i<l;i++){ |
| 687 |
_72=_72.remove(this._html[i]);
|
| 688 |
} |
| 689 |
return _72;
|
| 690 |
default:
|
| 691 |
return _72;
|
| 692 |
} |
| 693 |
},clone:function(){ |
| 694 |
return new this.constructor(this.contents.getExpression()); |
| 695 |
}}); |
| 696 |
dd.ChangeNode=dojo.extend(function(_73,up,_74){
|
| 697 |
this.contents=_73;
|
| 698 |
this.up=up;
|
| 699 |
this.root=_74;
|
| 700 |
},{render:function(_75,_76){
|
| 701 |
return _76.setParent(this.contents,this.up,this.root); |
| 702 |
},unrender:function(_77,_78){ |
| 703 |
if(!_78.getParent()){
|
| 704 |
return _78;
|
| 705 |
} |
| 706 |
return _78.setParent(this.contents); |
| 707 |
},clone:function(){ |
| 708 |
return new this.constructor(this.contents,this.up,this.root); |
| 709 |
}}); |
| 710 |
dd.AttributeNode=dojo.extend(function(key,_79){
|
| 711 |
this.key=key;
|
| 712 |
this.value=_79;
|
| 713 |
this.contents=_79;
|
| 714 |
if(this._pool[_79]){ |
| 715 |
this.nodelist=this._pool[_79]; |
| 716 |
}else{
|
| 717 |
if(!(this.nodelist=dd.quickFilter(_79))){ |
| 718 |
this.nodelist=(new dd.Template(_79,true)).nodelist; |
| 719 |
} |
| 720 |
this._pool[_79]=this.nodelist; |
| 721 |
} |
| 722 |
this.contents=""; |
| 723 |
},{_pool:{},render:function(_7a,_7b){
|
| 724 |
var key=this.key; |
| 725 |
var _7c=this.nodelist.dummyRender(_7a); |
| 726 |
if(dd.BOOLS[key]){
|
| 727 |
_7c=!(_7c=="false"||_7c=="undefined"||!_7c); |
| 728 |
} |
| 729 |
if(_7c!==this.contents){ |
| 730 |
this.contents=_7c;
|
| 731 |
return _7b.setAttribute(key,_7c);
|
| 732 |
} |
| 733 |
return _7b;
|
| 734 |
},unrender:function(_7d,_7e){ |
| 735 |
this.contents=""; |
| 736 |
return _7e.remove(this.key); |
| 737 |
},clone:function(_7f){ |
| 738 |
return new this.constructor(this.key,this.value); |
| 739 |
}}); |
| 740 |
dd._DomTextNode=dojo.extend(function(str){
|
| 741 |
this.contents=document.createTextNode(str);
|
| 742 |
this.upcoming=str;
|
| 743 |
},{set:function(_80){
|
| 744 |
this.upcoming=_80;
|
| 745 |
return this; |
| 746 |
},render:function(_81,_82){ |
| 747 |
if(this.contents.data!=this.upcoming){ |
| 748 |
var old=this.contents.data; |
| 749 |
this.contents.data=this.upcoming; |
| 750 |
_82.onChangeData&&_82.onChangeData(this.contents,old,this.upcoming); |
| 751 |
} |
| 752 |
return _82.concat(this.contents); |
| 753 |
},unrender:function(_83,_84){ |
| 754 |
return _84.remove(this.contents); |
| 755 |
},isEmpty:function(){ |
| 756 |
return !dojo.trim(this.contents.data); |
| 757 |
},clone:function(){ |
| 758 |
return new this.constructor(this.contents.data); |
| 759 |
}}); |
| 760 |
dd._DomParser=dojo.extend(function(_85){
|
| 761 |
this.contents=_85;
|
| 762 |
},{i:0,parse:function(_86){
|
| 763 |
var _87={};
|
| 764 |
var _88=this.contents; |
| 765 |
if(!_86){
|
| 766 |
_86=[]; |
| 767 |
} |
| 768 |
for(var i=0;i<_86.length;i++){ |
| 769 |
_87[_86[i]]=true;
|
| 770 |
} |
| 771 |
var _89=new dd._DomNodeList(); |
| 772 |
while(this.i<_88.length){ |
| 773 |
var _8a=_88[this.i++]; |
| 774 |
var _8b=_8a[0]; |
| 775 |
var _8c=_8a[1]; |
| 776 |
if(_8b==dd.TOKEN_CUSTOM){
|
| 777 |
_89.push(_8c); |
| 778 |
}else{
|
| 779 |
if(_8b==dd.TOKEN_CHANGE){
|
| 780 |
var _8d=new dd.ChangeNode(_8c,_8a[2],_8a[3]); |
| 781 |
_8c[_8d.attr]=_8d; |
| 782 |
_89.push(_8d); |
| 783 |
}else{
|
| 784 |
if(_8b==dd.TOKEN_ATTR){
|
| 785 |
var fn=_1.getTag("attr:"+_8a[2],true); |
| 786 |
if(fn&&_8a[3]){ |
| 787 |
if(_8a[3].indexOf("{%")!=-1||_8a[3].indexOf("{{")!=-1){ |
| 788 |
_8c.setAttribute(_8a[2],""); |
| 789 |
} |
| 790 |
_89.push(fn(null,new dd.Token(_8b,_8a[2]+" "+_8a[3]))); |
| 791 |
}else{
|
| 792 |
if(dojo.isString(_8a[3])){ |
| 793 |
if(_8a[2]=="style"||_8a[3].indexOf("{%")!=-1||_8a[3].indexOf("{{")!=-1){ |
| 794 |
_89.push(new dd.AttributeNode(_8a[2],_8a[3])); |
| 795 |
}else{
|
| 796 |
if(dojo.trim(_8a[3])){ |
| 797 |
try{
|
| 798 |
dojo.attr(_8c,_8a[2],_8a[3]); |
| 799 |
} |
| 800 |
catch(e){
|
| 801 |
} |
| 802 |
} |
| 803 |
} |
| 804 |
} |
| 805 |
} |
| 806 |
}else{
|
| 807 |
if(_8b==dd.TOKEN_NODE){
|
| 808 |
var fn=_1.getTag("node:"+_8c.tagName.toLowerCase(),true); |
| 809 |
if(fn){
|
| 810 |
_89.push(fn(null,new dd.Token(_8b,_8c),_8c.tagName.toLowerCase())); |
| 811 |
} |
| 812 |
_89.push(new dd._DomNode(_8c));
|
| 813 |
}else{
|
| 814 |
if(_8b==dd.TOKEN_VAR){
|
| 815 |
_89.push(new dd._DomVarNode(_8c));
|
| 816 |
}else{
|
| 817 |
if(_8b==dd.TOKEN_TEXT){
|
| 818 |
_89.push(new dd._DomTextNode(_8c.data||_8c));
|
| 819 |
}else{
|
| 820 |
if(_8b==dd.TOKEN_BLOCK){
|
| 821 |
if(_87[_8c]){
|
| 822 |
--this.i;
|
| 823 |
return _89;
|
| 824 |
} |
| 825 |
var cmd=_8c.split(/\s+/g); |
| 826 |
if(cmd.length){
|
| 827 |
cmd=cmd[0];
|
| 828 |
var fn=_1.getTag(cmd);
|
| 829 |
if(typeof fn!="function"){ |
| 830 |
throw new Error("Function not found for "+cmd); |
| 831 |
} |
| 832 |
var tpl=fn(this,new dd.Token(_8b,_8c)); |
| 833 |
if(tpl){
|
| 834 |
_89.push(tpl); |
| 835 |
} |
| 836 |
} |
| 837 |
} |
| 838 |
} |
| 839 |
} |
| 840 |
} |
| 841 |
} |
| 842 |
} |
| 843 |
} |
| 844 |
} |
| 845 |
if(_86.length){
|
| 846 |
throw new Error("Could not find closing tag(s): "+_86.toString()); |
| 847 |
} |
| 848 |
return _89;
|
| 849 |
},next_token:function(){ |
| 850 |
var _8e=this.contents[this.i++]; |
| 851 |
return new dd.Token(_8e[0],_8e[1]); |
| 852 |
},delete_first_token:function(){ |
| 853 |
this.i++;
|
| 854 |
},skip_past:function(_8f){ |
| 855 |
return dd._Parser.prototype.skip_past.call(this,_8f); |
| 856 |
},create_variable_node:function(_90){ |
| 857 |
return new dd._DomVarNode(_90); |
| 858 |
},create_text_node:function(_91){ |
| 859 |
return new dd._DomTextNode(_91||""); |
| 860 |
},getTemplate:function(loc){ |
| 861 |
return new dd.DomTemplate(_2.getTemplate(loc)); |
| 862 |
}}); |
| 863 |
})(); |
| 864 |
} |