1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- 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 buffering
- ATTRIBUTE : 2, // If an attribute or node changes, implement buffering
- TEXT : 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 render
- if (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;
- }
- }
- });
- }
|