123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- if (!dojo._hasResource["dojox.dtl.tag.html"]) { // _hasResource checks added by
- // build. Do not use
- // _hasResource directly in your
- // code.
- dojo._hasResource["dojox.dtl.tag.html"] = true;
- dojo.provide("dojox.dtl.tag.html");
- dojo.require("dojox.dtl._base");
- dojox.dtl.tag.html.HtmlNode = function(name) {
- this.contents = new dojox.dtl.Filter(name);
- this._div = document.createElement("div");
- this._lasts = [];
- }
- dojo.extend(dojox.dtl.tag.html.HtmlNode, {
- render : function(context, buffer) {
- var text = this.contents.resolve(context);
- text = text.replace(/<(\/?script)/ig, '<$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 dojox.dtl.tag.html.HtmlNode(this.contents.contents);
- },
- toString : function() {
- return "dojox.dtl.tag.html.HtmlNode";
- }
- });
- dojox.dtl.tag.html.StyleNode = function(styles) {
- this.contents = {};
- this._styles = styles;
- for (var key in styles) {
- this.contents[key] = new dojox.dtl.Template(styles[key]);
- }
- }
- dojo.extend(dojox.dtl.tag.html.StyleNode, {
- 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 dojox.dtl.tag.html.HtmlNode(this._styles);
- },
- toString : function() {
- return "dojox.dtl.tag.html.StyleNode";
- }
- });
- dojox.dtl.tag.html.AttachNode = function(key) {
- this.contents = key;
- }
- dojo.extend(dojox.dtl.tag.html.AttachNode, {
- render : function(context, buffer) {
- if (!this._rendered) {
- this._rendered = true;
- context.getThis()[this.contents] = buffer.getParent();
- }
- return buffer;
- },
- unrender : function(context, buffer) {
- if (this._rendered) {
- this._rendered = false;
- if (context.getThis()[this.contents] === buffer
- .getParent()) {
- delete context.getThis()[this.contents];
- }
- }
- return buffer;
- },
- clone : function(buffer) {
- return new dojox.dtl.tag.html.HtmlNode(this._styles);
- },
- toString : function() {
- return "dojox.dtl.tag.html.AttachNode";
- }
- });
- dojox.dtl.tag.html.html = function(parser, text) {
- var parts = text.split(" ", 2);
- return new dojox.dtl.tag.html.HtmlNode(parts[1]);
- }
- dojox.dtl.tag.html.tstyle = function(parser, text) {
- var styles = {};
- text = text.replace(dojox.dtl.tag.html.tstyle._re, "");
- var rules = text.split(dojox.dtl.tag.html.tstyle._re1);
- for (var i = 0, rule; rule = rules[i]; i++) {
- var parts = rule.split(dojox.dtl.tag.html.tstyle._re2);
- var key = parts[0];
- var value = parts[1];
- if (value.indexOf("{{") == 0) {
- styles[key] = value;
- }
- }
- return new dojox.dtl.tag.html.StyleNode(styles);
- }
- dojo.mixin(dojox.dtl.tag.html.tstyle, {
- _re : /^tstyle\s+/,
- _re1 : /\s*;\s*/g,
- _re2 : /\s*:\s*/g
- });
- dojox.dtl.tag.html.attach = function(parser, text) {
- var parts = text.split(dojox.dtl.tag.html.attach._re);
- return new dojox.dtl.tag.html.AttachNode(parts[1]);
- }
- dojo.mixin(dojox.dtl.tag.html.attach, {
- _re : /\s+/g
- })
- }
|