New file |
0,0 → 1,136 |
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 |
}) |
|
} |