1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2024-10-01 00:10:45 +00:00

Finally, selective refreshing now works

Although it's a bit hard to see which DOM nodes have been refreshed.
This commit is contained in:
Jeremy Ruston 2012-01-25 12:05:18 +00:00
parent dad7756f65
commit 0d45d76af6
3 changed files with 30 additions and 13 deletions

View File

@ -115,8 +115,8 @@ var App = function() {
var me = this;
window.setInterval(function() {
me.store.addTiddler(new Tiddler({
title: "HelloThere",
text: "This tiddler is growing\n" + me.store.getTiddlerText("HelloThere")
title: "TiddlyWiki5",
text: "This tiddler is new"
}));
},3000);
// Register an event handler to handle refreshing the DOM

View File

@ -386,14 +386,16 @@ WikiStore.prototype.renderMacro = function(macroName,targetType,tiddler,params,c
/*
Refresh a DOM node and it's children so that it reflects the current state of the store
node: reference to the DOM node to be refreshed
changes: hashmap of {title: "created|modified|deleted"}
changes: hashmap of {title: "created|modified|deleted"}
renderer: the renderer to use to refresh the node (usually pass null)
tiddler: the tiddler to use as the context for executing the renderer
*/
WikiStore.prototype.refreshDomNode = function(node,changes) {
WikiStore.prototype.refreshDomNode = function(node,changes,renderer,tiddler) {
var me = this,
refreshChildNodes = function(node) {
refreshChildNodes = function(node,renderer,tidder) {
if(node.hasChildNodes()) {
for(var c=0; c<node.childNodes.length; c++) {
me.refreshDomNode(node.childNodes[c],changes);
me.refreshDomNode(node.childNodes[c],changes,renderer,tiddler);
}
}
};
@ -409,15 +411,34 @@ WikiStore.prototype.refreshDomNode = function(node,changes) {
node.innerHTML = this.renderTiddler("text/html",renderTiddler,renderAs,{noWrap: true});
} else {
// If it hasn't changed, just refresh the child nodes
refreshChildNodes(node);
var asTiddler = renderAs !== null ? this.getTiddler(renderAs) : this.getTiddler(renderTiddler);
refreshChildNodes(node,this.compileTiddler(renderTiddler,"text/html"),asTiddler);
}
// Is this node a macro
} else if(macro !== null) {
refreshChildNodes(node);
// Get the render step
var r = renderer.renderSteps[renderStep],
hasChanged = false;
// Refresh if a dependency has changed
if(r.dependencies === null) {
hasChanged = true;
} else {
for(var d=0; d<r.dependencies.length; d++) {
if(r.dependencies[d] in changes) {
hasChanged = true;
}
}
}
if(hasChanged) {
node.innerHTML = renderer.render(tiddler,this,renderStep);
} else {
// If no change, just refresh the children
refreshChildNodes(node,renderer,tiddler);
}
// If it's not a macro or a tiddler rendering, just process any child nodes
} else {
refreshChildNodes(node);
refreshChildNodes(node,renderer,tiddler);
}
};

View File

@ -29,10 +29,6 @@ WikiTextRenderer.prototype.render = function(tiddler,store,renderStep) {
}
};
WikiTextRenderer.prototype.refreshDom = function(node,tiddler,store) {
};
WikiTextRenderer.prototype.toString = function(type) {
var output = [],
customTemplates = [