var ComponentsContext = require('../ComponentsContext'); var getElementById = require('../util').$__getElementById; module.exports = function render(input, out) { var global = out.global; if (global.$w !== undefined) { var id = input.id; // See if the DOM node with the given ID already exists. // If so, then reuse the existing DOM node instead of re-rendering // the children. We have to put a placeholder node that will get // replaced out if we find that the DOM node has already been rendered var condition = input['if']; if (condition !== false) { var existingEl = getElementById(out.$__document, id); if (existingEl) { var componentsContext = ComponentsContext.$__getComponentsContext(out); var bodyOnly = input.bodyOnly === true; // Don't actually render anything since the element is already in the DOM, // but keep track that the node is being preserved so that we can ignore // it while transforming the old DOM if (!bodyOnly) { var tagName = existingEl.tagName; // If we are preserving the entire DOM node (not just the body) // then that means that we have need to render a placeholder to // mark the target location. We can then replace the placeholder // node with the existing DOM node out.element(tagName, { id: id }); } componentsContext.$__preserveDOMNode(id, bodyOnly); return; } } } if (input.renderBody) { input.renderBody(out); } };