]> git.pond.sub.org Git - eow/blobdiff - 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
diff --git a/static/dojo-release-1.1.1/dojox/dtl/contrib/html.js b/static/dojo-release-1.1.1/dojox/dtl/contrib/html.js
new file mode 100644 (file)
index 0000000..260bbe2
--- /dev/null
@@ -0,0 +1,107 @@
+if(!dojo._hasResource["dojox.dtl.contrib.html"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.dtl.contrib.html"] = true;
+dojo.provide("dojox.dtl.contrib.html");
+
+dojo.require("dojox.dtl.html");
+
+(function(){
+       var dd = dojox.dtl;
+       var ddch = dd.contrib.html;
+
+       ddch.HtmlNode = dojo.extend(function(name){
+               this.contents = new dd._Filter(name);
+               this._div = document.createElement("div");
+               this._lasts = [];
+       },
+       {
+               render: function(context, buffer){
+                       var text = this.contents.resolve(context);
+                       if(text){
+                               text = text.replace(/<(\/?script)/ig, '&lt;$1').replace(/\bon[a-z]+\s*=/ig, '');
+                               if(this._rendered && this._last != text){
+                                       buffer = this.unrender(context, buffer);
+                               }
+                               this._last = text;
+
+                               // This can get reset in the above tag
+                               if(!this._rendered){
+                                       this._rendered = true;
+                                       var div = this._div;
+                                       div.innerHTML = text;
+                                       var children = div.childNodes;
+                                       while(children.length){
+                                               var removed = div.removeChild(children[0]);
+                                               this._lasts.push(removed);
+                                               buffer = buffer.concat(removed);
+                                       }
+                               }
+                       }
+
+                       return buffer;
+               },
+               unrender: function(context, buffer){
+                       if(this._rendered){
+                               this._rendered = false;
+                               this._last = "";
+                               for(var i = 0, node; node = this._lasts[i++];){
+                                       buffer = buffer.remove(node);
+                                       dojo._destroyElement(node);
+                               }
+                               this._lasts = [];
+                       }
+                       return buffer;
+               },
+               clone: function(buffer){
+                       return new this.constructor(this.contents.getExpression());
+               }
+       });
+
+       ddch.StyleNode = dojo.extend(function(styles){
+               this.contents = {};
+               this._styles = styles;
+               for(var key in styles){
+                       this.contents[key] = new dd.Template(styles[key]);
+               }
+       },
+       {
+               render: function(context, buffer){
+                       for(var key in this.contents){
+                               dojo.style(buffer.getParent(), key, this.contents[key].render(context));
+                       }
+                       return buffer;
+               },
+               unrender: function(context, buffer){
+                       return buffer;
+               },
+               clone: function(buffer){
+                       return new this.constructor(this._styles);
+               }
+       });
+
+       dojo.mixin(ddch, {
+               html: function(parser, text){
+                       var parts = text.split(" ", 2);
+                       return new ddch.HtmlNode(parts[1]);
+               },
+               tstyle: function(parser, text){
+                       var styles = {};
+                       text = text.replace(/^tstyle\s+/, "");
+                       var rules = text.split(/\s*;\s*/g);
+                       for(var i = 0, rule; rule = rules[i]; i++){
+                               var parts = rule.split(/\s*:\s*/g);
+                               var key = parts[0];
+                               var value = parts[1];
+                               if(value.indexOf("{{") == 0){
+                                       styles[key] = value;
+                               }
+                       }
+                       return new ddch.StyleNode(styles);
+               }
+       });
+
+       dd.register.tags("dojox.dtl.contrib", {
+               "html": ["html", "attr:tstyle"]
+       });
+})();
+
+}