]> git.pond.sub.org Git - eow/blob - static/dojo-release-1.1.1/dojox/dtl/contrib/html.js
add Dojo 1.1.1
[eow] / static / dojo-release-1.1.1 / dojox / dtl / contrib / html.js
1 if(!dojo._hasResource["dojox.dtl.contrib.html"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
2 dojo._hasResource["dojox.dtl.contrib.html"] = true;
3 dojo.provide("dojox.dtl.contrib.html");
4
5 dojo.require("dojox.dtl.html");
6
7 (function(){
8         var dd = dojox.dtl;
9         var ddch = dd.contrib.html;
10
11         ddch.HtmlNode = dojo.extend(function(name){
12                 this.contents = new dd._Filter(name);
13                 this._div = document.createElement("div");
14                 this._lasts = [];
15         },
16         {
17                 render: function(context, buffer){
18                         var text = this.contents.resolve(context);
19                         if(text){
20                                 text = text.replace(/<(\/?script)/ig, '&lt;$1').replace(/\bon[a-z]+\s*=/ig, '');
21                                 if(this._rendered && this._last != text){
22                                         buffer = this.unrender(context, buffer);
23                                 }
24                                 this._last = text;
25
26                                 // This can get reset in the above tag
27                                 if(!this._rendered){
28                                         this._rendered = true;
29                                         var div = this._div;
30                                         div.innerHTML = text;
31                                         var children = div.childNodes;
32                                         while(children.length){
33                                                 var removed = div.removeChild(children[0]);
34                                                 this._lasts.push(removed);
35                                                 buffer = buffer.concat(removed);
36                                         }
37                                 }
38                         }
39
40                         return buffer;
41                 },
42                 unrender: function(context, buffer){
43                         if(this._rendered){
44                                 this._rendered = false;
45                                 this._last = "";
46                                 for(var i = 0, node; node = this._lasts[i++];){
47                                         buffer = buffer.remove(node);
48                                         dojo._destroyElement(node);
49                                 }
50                                 this._lasts = [];
51                         }
52                         return buffer;
53                 },
54                 clone: function(buffer){
55                         return new this.constructor(this.contents.getExpression());
56                 }
57         });
58
59         ddch.StyleNode = dojo.extend(function(styles){
60                 this.contents = {};
61                 this._styles = styles;
62                 for(var key in styles){
63                         this.contents[key] = new dd.Template(styles[key]);
64                 }
65         },
66         {
67                 render: function(context, buffer){
68                         for(var key in this.contents){
69                                 dojo.style(buffer.getParent(), key, this.contents[key].render(context));
70                         }
71                         return buffer;
72                 },
73                 unrender: function(context, buffer){
74                         return buffer;
75                 },
76                 clone: function(buffer){
77                         return new this.constructor(this._styles);
78                 }
79         });
80
81         dojo.mixin(ddch, {
82                 html: function(parser, text){
83                         var parts = text.split(" ", 2);
84                         return new ddch.HtmlNode(parts[1]);
85                 },
86                 tstyle: function(parser, text){
87                         var styles = {};
88                         text = text.replace(/^tstyle\s+/, "");
89                         var rules = text.split(/\s*;\s*/g);
90                         for(var i = 0, rule; rule = rules[i]; i++){
91                                 var parts = rule.split(/\s*:\s*/g);
92                                 var key = parts[0];
93                                 var value = parts[1];
94                                 if(value.indexOf("{{") == 0){
95                                         styles[key] = value;
96                                 }
97                         }
98                         return new ddch.StyleNode(styles);
99                 }
100         });
101
102         dd.register.tags("dojox.dtl.contrib", {
103                 "html": ["html", "attr:tstyle"]
104         });
105 })();
106
107 }