Blame | Last modification | View Log | RSS feed
if(!dojo._hasResource["dojox.dtl.render.html"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.dojo._hasResource["dojox.dtl.render.html"] = true;dojo.provide("dojox.dtl.render.html");dojox.dtl.render.html.sensitivity = {// summary:// Set conditions under which to buffer changes// description:// Necessary if you make a lot of changes to your template.// What happens is that the entire node, from the attached DOM Node// down gets swapped with a clone, and until the entire rendering// is complete, we don't replace the clone again. In this way, renders are// "batched".//// But, if we're only changing a small number of nodes, we might no want to buffer at all.// The higher numbers mean that even small changes will result in buffering.// Each higher level includes the lower levels.NODE: 1, // If a node changes, implement bufferingATTRIBUTE: 2, // If an attribute or node changes, implement bufferingTEXT: 3 // If any text at all changes, implement buffering}dojox.dtl.render.html.Render = function(/*DOMNode?*/ attachPoint, /*dojox.dtl.HtmlTemplate?*/ tpl){this._tpl = tpl;this._node = attachPoint;this._swap = dojo.hitch(this, function(){// summary: Swaps the node out the first time the DOM is changed// description: Gets swapped back it at end of renderif(this._node === this._tpl.getRootNode()){var frag = this._node;this._node = this._node.cloneNode(true);frag.parentNode.replaceChild(this._node, frag);}});}dojo.extend(dojox.dtl.render.html.Render, {sensitivity: dojox.dtl.render.html.sensitivity,setAttachPoint: function(/*Node*/ node){this._node = node;},render: function(/*dojox.dtl.HtmlTemplate*/ tpl, /*Object*/ context, /*dojox.dtl.HtmlBuffer?*/ buffer){if(!this._node){throw new Error("You cannot use the Render object without specifying where you want to render it");}buffer = buffer || tpl.getBuffer();if(context.getThis() && context.getThis().buffer == this.sensitivity.NODE){var onAddNode = dojo.connect(buffer, "onAddNode", this, "_swap");var onRemoveNode = dojo.connect(buffer, "onRemoveNode", this, "_swap");}if(this._tpl && this._tpl !== tpl){this._tpl.unrender(context, buffer);}this._tpl = tpl;var frag = tpl.render(context, buffer).getParent();dojo.disconnect(onAddNode);dojo.disconnect(onRemoveNode);if(this._node !== frag){this._node.parentNode.replaceChild(frag, this._node);dojo._destroyElement(this._node);this._node = frag;}}});}