root / trunk / web / dojo / dojox / dtl / dom.js
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 |
} |