root / trunk / web / dojo / dojox / dtl / dom.js
History | View | Annotate | Download (18.1 KB)
1 | 9 | andrej.cim | /*
|
---|---|---|---|
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 | } |