From 221cc80c65e1e89decb555a7fde259f8fe804cc6 Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Fri, 17 Feb 2012 12:34:56 +0000 Subject: [PATCH] Updated renderer to handle refreshing Now we can refresh renderers that aren't in a DOM tree --- js/Renderer.js | 65 ++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 61 insertions(+), 4 deletions(-) diff --git a/js/Renderer.js b/js/Renderer.js index 80380aeed..1d98a31cf 100644 --- a/js/Renderer.js +++ b/js/Renderer.js @@ -62,7 +62,7 @@ MacroNode.prototype.render = function(type) { MacroNode.prototype.renderInDom = function(domNode,insertBefore) { // Create the wrapper node for the macro - var macroContainer = document.createElement(this.macro.wrapperTag || "div"); + var macroContainer = document.createElement(this.macro.wrapperTag || "span"); this.domNode = macroContainer; if(insertBefore) { domNode.insertBefore(macroContainer,insertBefore); @@ -85,6 +85,37 @@ MacroNode.prototype.renderInDom = function(domNode,insertBefore) { } }; +MacroNode.prototype.refresh = function(changes) { + var t, + self = this, + hasDependencyChanged = function() { + if(self.dependencies.dependentAll) { + return true; + } + for(var rel in self.dependencies) { + if(rel !== "dependentAll") { + for(var t in self.dependencies[rel]) { + if(changes.hasOwnProperty(t)) { + return true; + } + } + } + } + return false; + }; + // Check if any of the dependencies of this macro node have changed + if(hasDependencyChanged()) { + // Re-execute the macro if so + var tiddler = this.store.getTiddler(this.tiddlerTitle); + this.execute(tiddler); + } else { + // Refresh any children + for(t=0; t