mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2025-08-08 06:43:49 +00:00
Refactor rendertree to simplify context handling
Get rid of the separate renderContext stack and instead have a parent pointer on renderer nodes. This lets us walk back up the render tree to resolve context references
This commit is contained in:
parent
32dc09d8ac
commit
8564602256
@ -78,7 +78,7 @@ $tw.utils.error = function(err) {
|
|||||||
Check if an object has a property
|
Check if an object has a property
|
||||||
*/
|
*/
|
||||||
$tw.utils.hop = function(object,property) {
|
$tw.utils.hop = function(object,property) {
|
||||||
return Object.prototype.hasOwnProperty.call(object,property);
|
return object ? Object.prototype.hasOwnProperty.call(object,property) : false;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -39,8 +39,8 @@ Command.prototype.execute = function() {
|
|||||||
parser = wiki.parseTiddler(template),
|
parser = wiki.parseTiddler(template),
|
||||||
tiddlers = wiki.filterTiddlers(filter);
|
tiddlers = wiki.filterTiddlers(filter);
|
||||||
$tw.utils.each(tiddlers,function(title) {
|
$tw.utils.each(tiddlers,function(title) {
|
||||||
var renderTree = new $tw.WikiRenderTree(parser,{wiki: wiki});
|
var renderTree = new $tw.WikiRenderTree(parser,{wiki: wiki, context: {tiddlerTitle: title}});
|
||||||
renderTree.execute({tiddlerTitle: title});
|
renderTree.execute();
|
||||||
var text = renderTree.render(type);
|
var text = renderTree.render(type);
|
||||||
fs.writeFileSync(path.resolve(pathname,encodeURIComponent(title) + extension),text,"utf8");
|
fs.writeFileSync(path.resolve(pathname,encodeURIComponent(title) + extension),text,"utf8");
|
||||||
});
|
});
|
||||||
|
@ -19,7 +19,7 @@ var ElementWidget = function(renderer) {
|
|||||||
this.renderer = renderer;
|
this.renderer = renderer;
|
||||||
this.tag = this.renderer.parseTreeNode.tag;
|
this.tag = this.renderer.parseTreeNode.tag;
|
||||||
this.attributes = this.renderer.attributes;
|
this.attributes = this.renderer.attributes;
|
||||||
this.children = this.renderer.renderTree.createRenderers(this.renderer.renderContext,this.renderer.parseTreeNode.children);
|
this.children = this.renderer.renderTree.createRenderers(this.renderer,this.renderer.parseTreeNode.children);
|
||||||
this.events = this.renderer.parseTreeNode.events;
|
this.events = this.renderer.parseTreeNode.events;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -40,22 +40,24 @@ ElementWidget.prototype.refreshInDom = function(changedAttributes,changedTiddler
|
|||||||
/*
|
/*
|
||||||
Element renderer
|
Element renderer
|
||||||
*/
|
*/
|
||||||
var ElementRenderer = function(renderTree,renderContext,parseTreeNode) {
|
var ElementRenderer = function(renderTree,parentRenderer,parseTreeNode) {
|
||||||
// Store state information
|
// Store state information
|
||||||
this.renderTree = renderTree;
|
this.renderTree = renderTree;
|
||||||
this.renderContext = renderContext;
|
this.parentRenderer = parentRenderer;
|
||||||
this.parseTreeNode = parseTreeNode;
|
this.parseTreeNode = parseTreeNode;
|
||||||
// Initialise widget classes
|
// Initialise widget classes
|
||||||
if(!this.widgetClasses) {
|
if(!this.widgetClasses) {
|
||||||
ElementRenderer.prototype.widgetClasses = $tw.modules.applyMethods("widget");
|
ElementRenderer.prototype.widgetClasses = $tw.modules.applyMethods("widget");
|
||||||
}
|
}
|
||||||
|
// Get the context tiddler title
|
||||||
|
this.tiddlerTitle = this.renderTree.getContextVariable(this.parentRenderer,"tiddlerTitle");
|
||||||
// Compute our dependencies
|
// Compute our dependencies
|
||||||
this.dependencies = {};
|
this.dependencies = {};
|
||||||
var self = this;
|
var self = this;
|
||||||
$tw.utils.each(this.parseTreeNode.attributes,function(attribute,name) {
|
$tw.utils.each(this.parseTreeNode.attributes,function(attribute,name) {
|
||||||
if(attribute.type === "indirect") {
|
if(attribute.type === "indirect") {
|
||||||
var tr = $tw.utils.parseTextReference(attribute.textReference);
|
var tr = $tw.utils.parseTextReference(attribute.textReference);
|
||||||
self.dependencies[tr.title ? tr.title : renderContext.tiddlerTitle] = true;
|
self.dependencies[tr.title ? tr.title : self.tiddlerTitle] = true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
// Compute our attributes
|
// Compute our attributes
|
||||||
@ -86,7 +88,7 @@ ElementRenderer.prototype.computeAttributes = function() {
|
|||||||
var self = this;
|
var self = this;
|
||||||
$tw.utils.each(this.parseTreeNode.attributes,function(attribute,name) {
|
$tw.utils.each(this.parseTreeNode.attributes,function(attribute,name) {
|
||||||
if(attribute.type === "indirect") {
|
if(attribute.type === "indirect") {
|
||||||
var value = self.renderTree.wiki.getTextReference(attribute.textReference,"",self.renderContext.tiddlerTitle);
|
var value = self.renderTree.wiki.getTextReference(attribute.textReference,"",self.tiddlerTitle);
|
||||||
if(self.attributes[name] !== value) {
|
if(self.attributes[name] !== value) {
|
||||||
self.attributes[name] = value;
|
self.attributes[name] = value;
|
||||||
changedAttributes[name] = true;
|
changedAttributes[name] = true;
|
||||||
@ -221,68 +223,6 @@ ElementRenderer.prototype.refreshInDom = function(changedTiddlers) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
ElementRenderer.prototype.getContextTiddlerTitle = function() {
|
|
||||||
var context = this.renderContext;
|
|
||||||
while(context) {
|
|
||||||
if($tw.utils.hop(context,"tiddlerTitle")) {
|
|
||||||
return context.tiddlerTitle;
|
|
||||||
}
|
|
||||||
context = context.parentContext;
|
|
||||||
}
|
|
||||||
return undefined;
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
Check for render context recursion by returning true if the members of a proposed new render context are already present in the render context chain
|
|
||||||
*/
|
|
||||||
ElementRenderer.prototype.checkContextRecursion = function(newRenderContext) {
|
|
||||||
var context = this.renderContext;
|
|
||||||
while(context) {
|
|
||||||
var match = true;
|
|
||||||
for(var member in newRenderContext) {
|
|
||||||
if($tw.utils.hop(newRenderContext,member)) {
|
|
||||||
if(newRenderContext[member] && newRenderContext[member] !== context[member]) {
|
|
||||||
match = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(match) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
context = context.parentContext;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
};
|
|
||||||
|
|
||||||
ElementRenderer.prototype.getContextScopeId = function() {
|
|
||||||
var guidBits = [],
|
|
||||||
context = this.renderContext;
|
|
||||||
while(context) {
|
|
||||||
$tw.utils.each(context,function(field,name) {
|
|
||||||
if(name !== "parentContext") {
|
|
||||||
guidBits.push(name + ":" + field + ";");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
guidBits.push("-");
|
|
||||||
context = context.parentContext;
|
|
||||||
}
|
|
||||||
return guidBits.join("");
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
Find a named macro definition
|
|
||||||
*/
|
|
||||||
ElementRenderer.prototype.findMacroDefinition = function(name) {
|
|
||||||
var context = this.renderContext;
|
|
||||||
while(context) {
|
|
||||||
if(context.macroDefinitions && context.macroDefinitions[name]) {
|
|
||||||
return context.macroDefinitions[name];
|
|
||||||
}
|
|
||||||
context = context.parentContext;
|
|
||||||
}
|
|
||||||
return undefined;
|
|
||||||
};
|
|
||||||
|
|
||||||
exports.element = ElementRenderer
|
exports.element = ElementRenderer
|
||||||
|
|
||||||
})();
|
})();
|
||||||
|
@ -15,10 +15,10 @@ Entity renderer
|
|||||||
/*
|
/*
|
||||||
Entity renderer
|
Entity renderer
|
||||||
*/
|
*/
|
||||||
var EntityRenderer = function(renderTree,renderContext,parseTreeNode) {
|
var EntityRenderer = function(renderTree,parentRenderer,parseTreeNode) {
|
||||||
// Store state information
|
// Store state information
|
||||||
this.renderTree = renderTree;
|
this.renderTree = renderTree;
|
||||||
this.renderContext = renderContext;
|
this.parentRenderer = parentRenderer;
|
||||||
this.parseTreeNode = parseTreeNode;
|
this.parseTreeNode = parseTreeNode;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -15,13 +15,13 @@ Macro call renderer
|
|||||||
/*
|
/*
|
||||||
Macro call renderer
|
Macro call renderer
|
||||||
*/
|
*/
|
||||||
var MacroCallRenderer = function(renderTree,renderContext,parseTreeNode) {
|
var MacroCallRenderer = function(renderTree,parentRenderer,parseTreeNode) {
|
||||||
// Store state information
|
// Store state information
|
||||||
this.renderTree = renderTree;
|
this.renderTree = renderTree;
|
||||||
this.renderContext = renderContext;
|
this.parentRenderer = parentRenderer;
|
||||||
this.parseTreeNode = parseTreeNode;
|
this.parseTreeNode = parseTreeNode;
|
||||||
// Find the macro definition
|
// Find the macro definition
|
||||||
var macro = this.findMacroDefinition(this.parseTreeNode.name);
|
var macro = this.renderTree.findMacroDefinition(this.parentRenderer,this.parseTreeNode.name);
|
||||||
// Insert an error message if we couldn't find the macro
|
// Insert an error message if we couldn't find the macro
|
||||||
var childTree;
|
var childTree;
|
||||||
if(!macro) {
|
if(!macro) {
|
||||||
@ -33,21 +33,7 @@ var MacroCallRenderer = function(renderTree,renderContext,parseTreeNode) {
|
|||||||
childTree = this.renderTree.wiki.parseText("text/vnd.tiddlywiki",text,{parseAsInline: !this.parseTreeNode.isBlock}).tree;
|
childTree = this.renderTree.wiki.parseText("text/vnd.tiddlywiki",text,{parseAsInline: !this.parseTreeNode.isBlock}).tree;
|
||||||
}
|
}
|
||||||
// Create the renderers for the child nodes
|
// Create the renderers for the child nodes
|
||||||
this.children = this.renderTree.createRenderers(this.renderContext,childTree);
|
this.children = this.renderTree.createRenderers(this,childTree);
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
Find a named macro definition
|
|
||||||
*/
|
|
||||||
MacroCallRenderer.prototype.findMacroDefinition = function(name) {
|
|
||||||
var context = this.renderContext;
|
|
||||||
while(context) {
|
|
||||||
if(context.macroDefinitions && context.macroDefinitions[name]) {
|
|
||||||
return context.macroDefinitions[name];
|
|
||||||
}
|
|
||||||
context = context.parentContext;
|
|
||||||
}
|
|
||||||
return undefined;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -15,14 +15,14 @@ Macro definition renderer
|
|||||||
/*
|
/*
|
||||||
Macro definition renderer
|
Macro definition renderer
|
||||||
*/
|
*/
|
||||||
var MacroDefRenderer = function(renderTree,renderContext,parseTreeNode) {
|
var MacroDefRenderer = function(renderTree,parentRenderer,parseTreeNode) {
|
||||||
// Store state information
|
// Store state information
|
||||||
this.renderTree = renderTree;
|
this.renderTree = renderTree;
|
||||||
this.renderContext = renderContext;
|
this.parentRenderer = parentRenderer;
|
||||||
this.parseTreeNode = parseTreeNode;
|
this.parseTreeNode = parseTreeNode;
|
||||||
// Save the macro definition into the render context
|
// Save the macro definition into the context of the rendertree
|
||||||
this.renderContext.macroDefinitions = this.renderContext.macroDefinitions || {};
|
this.renderTree.context.macroDefinitions = this.renderTree.context.macroDefinitions || {};
|
||||||
this.renderContext.macroDefinitions[this.parseTreeNode.name] = this.parseTreeNode;
|
this.renderTree.context.macroDefinitions[this.parseTreeNode.name] = this.parseTreeNode;
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.macrodef = MacroDefRenderer
|
exports.macrodef = MacroDefRenderer
|
||||||
|
@ -15,10 +15,10 @@ Raw HTML renderer
|
|||||||
/*
|
/*
|
||||||
Raw HTML renderer
|
Raw HTML renderer
|
||||||
*/
|
*/
|
||||||
var RawRenderer = function(renderTree,renderContext,parseTreeNode) {
|
var RawRenderer = function(renderTree,parentRenderer,parseTreeNode) {
|
||||||
// Store state information
|
// Store state information
|
||||||
this.renderTree = renderTree;
|
this.renderTree = renderTree;
|
||||||
this.renderContext = renderContext;
|
this.parentRenderer = parentRenderer;
|
||||||
this.parseTreeNode = parseTreeNode;
|
this.parseTreeNode = parseTreeNode;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -15,10 +15,10 @@ Text renderer
|
|||||||
/*
|
/*
|
||||||
Text renderer
|
Text renderer
|
||||||
*/
|
*/
|
||||||
var TextRenderer = function(renderTree,renderContext,parseTreeNode) {
|
var TextRenderer = function(renderTree,parentRenderer,parseTreeNode) {
|
||||||
// Store state information
|
// Store state information
|
||||||
this.renderTree = renderTree;
|
this.renderTree = renderTree;
|
||||||
this.renderContext = renderContext;
|
this.parentRenderer = parentRenderer;
|
||||||
this.parseTreeNode = parseTreeNode;
|
this.parseTreeNode = parseTreeNode;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -14,37 +14,41 @@ Wiki text render tree
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
Create a render tree object for a parse tree
|
Create a render tree object for a parse tree
|
||||||
|
parser: reference to the parse tree to be rendered
|
||||||
|
options: see below
|
||||||
|
Options include:
|
||||||
|
wiki: mandatory reference to wiki associated with this render tree
|
||||||
|
context: optional hashmap of context variables (see below)
|
||||||
|
Context variables include:
|
||||||
|
tiddlerTitle: title of the tiddler providing the context
|
||||||
|
templateTitle: title of the tiddler providing the current template
|
||||||
|
macroDefinitions: hashmap of macro definitions
|
||||||
*/
|
*/
|
||||||
var WikiRenderTree = function(parser,options) {
|
var WikiRenderTree = function(parser,options) {
|
||||||
this.parser = parser;
|
this.parser = parser;
|
||||||
this.wiki = options.wiki;
|
this.wiki = options.wiki;
|
||||||
|
this.context = options.context || {};
|
||||||
// Hashmap of the renderer classes
|
// Hashmap of the renderer classes
|
||||||
if(!this.rendererClasses) {
|
if(!this.rendererClasses) {
|
||||||
WikiRenderTree.prototype.rendererClasses = $tw.modules.applyMethods("wikirenderer");
|
WikiRenderTree.prototype.rendererClasses = $tw.modules.applyMethods("wikirenderer");
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Generate the full render tree for this parse tree
|
Generate the full render tree for this parse tree
|
||||||
renderContext: see below
|
|
||||||
An renderContext consists of these fields:
|
|
||||||
tiddlerTitle: title of the tiddler providing the context
|
|
||||||
parentContext: reference back to previous context in the stack
|
|
||||||
*/
|
*/
|
||||||
WikiRenderTree.prototype.execute = function(renderContext) {
|
WikiRenderTree.prototype.execute = function() {
|
||||||
renderContext = renderContext || {};
|
this.rendererTree = this.createRenderers(this,this.parser.tree);
|
||||||
this.rendererTree = this.createRenderers(renderContext,this.parser.tree);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Create an array of renderers for an array of parse tree nodes
|
Create an array of renderers for an array of parse tree nodes
|
||||||
*/
|
*/
|
||||||
WikiRenderTree.prototype.createRenderers = function(renderContext,parseTreeNodes) {
|
WikiRenderTree.prototype.createRenderers = function(parentRenderer,parseTreeNodes) {
|
||||||
var rendererNodes = [];
|
var rendererNodes = [];
|
||||||
if(parseTreeNodes) {
|
if(parseTreeNodes) {
|
||||||
for(var t=0; t<parseTreeNodes.length; t++) {
|
for(var t=0; t<parseTreeNodes.length; t++) {
|
||||||
rendererNodes.push(this.createRenderer(renderContext,parseTreeNodes[t]));
|
rendererNodes.push(this.createRenderer(parentRenderer,parseTreeNodes[t]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return rendererNodes;
|
return rendererNodes;
|
||||||
@ -53,9 +57,9 @@ WikiRenderTree.prototype.createRenderers = function(renderContext,parseTreeNodes
|
|||||||
/*
|
/*
|
||||||
Create a renderer node for a parse tree node
|
Create a renderer node for a parse tree node
|
||||||
*/
|
*/
|
||||||
WikiRenderTree.prototype.createRenderer = function(renderContext,parseTreeNode) {
|
WikiRenderTree.prototype.createRenderer = function(parentRenderer,parseTreeNode) {
|
||||||
var RenderNodeClass = this.rendererClasses[parseTreeNode.type];
|
var RenderNodeClass = this.rendererClasses[parseTreeNode.type];
|
||||||
return new RenderNodeClass(this,renderContext,parseTreeNode);
|
return new RenderNodeClass(this,parentRenderer,parseTreeNode);
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -94,6 +98,72 @@ WikiRenderTree.prototype.refreshInDom = function(changes) {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
Find the value of a given context variable for a particular renderer node
|
||||||
|
*/
|
||||||
|
WikiRenderTree.prototype.getContextVariable = function(renderer,name) {
|
||||||
|
while(renderer) {
|
||||||
|
if($tw.utils.hop(renderer.context,name)) {
|
||||||
|
return renderer.context[name];
|
||||||
|
}
|
||||||
|
renderer = renderer.parentRenderer;
|
||||||
|
};
|
||||||
|
return undefined;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
Check for render context recursion from a particular renderer node by returning true if the members of a proposed new render context are already present in the render context chain
|
||||||
|
*/
|
||||||
|
WikiRenderTree.prototype.checkContextRecursion = function(renderer,newContext) {
|
||||||
|
while(renderer) {
|
||||||
|
var context = renderer.context;
|
||||||
|
if(context) {
|
||||||
|
var match = true;
|
||||||
|
for(var member in newContext) {
|
||||||
|
if($tw.utils.hop(context,member)) {
|
||||||
|
if(newContext[member] !== context[member]) {
|
||||||
|
match = false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
match = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(match) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
renderer = renderer.parentRenderer;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
WikiRenderTree.prototype.getContextScopeId = function(renderer) {
|
||||||
|
var guidBits = [];
|
||||||
|
while(renderer) {
|
||||||
|
if(renderer.context) {
|
||||||
|
$tw.utils.each(renderer.context,function(field,name) {
|
||||||
|
guidBits.push(name + ":" + field + ";");
|
||||||
|
});
|
||||||
|
guidBits.push("-");
|
||||||
|
}
|
||||||
|
renderer = renderer.parentRenderer;
|
||||||
|
}
|
||||||
|
return guidBits.join("");
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
Find a named macro definition
|
||||||
|
*/
|
||||||
|
WikiRenderTree.prototype.findMacroDefinition = function(renderer,name) {
|
||||||
|
while(renderer) {
|
||||||
|
if(renderer.context && renderer.context.macroDefinitions && renderer.context.macroDefinitions[name]) {
|
||||||
|
return renderer.context.macroDefinitions[name];
|
||||||
|
}
|
||||||
|
renderer = renderer.parentRenderer;
|
||||||
|
}
|
||||||
|
return undefined;
|
||||||
|
};
|
||||||
|
|
||||||
exports.WikiRenderTree = WikiRenderTree;
|
exports.WikiRenderTree = WikiRenderTree;
|
||||||
|
|
||||||
})();
|
})();
|
||||||
|
@ -112,8 +112,8 @@ exports.startup = function() {
|
|||||||
// Display the PageTemplate
|
// Display the PageTemplate
|
||||||
var templateTitle = "$:/templates/PageTemplate",
|
var templateTitle = "$:/templates/PageTemplate",
|
||||||
parser = $tw.wiki.parseTiddler(templateTitle),
|
parser = $tw.wiki.parseTiddler(templateTitle),
|
||||||
renderTree = new $tw.WikiRenderTree(parser,{wiki: $tw.wiki});
|
renderTree = new $tw.WikiRenderTree(parser,{wiki: $tw.wiki, context: {tiddlerTitle: templateTitle}});
|
||||||
renderTree.execute({tiddlerTitle: templateTitle});
|
renderTree.execute();
|
||||||
var container = document.createElement("div");
|
var container = document.createElement("div");
|
||||||
document.body.insertBefore(container,document.body.firstChild);
|
document.body.insertBefore(container,document.body.firstChild);
|
||||||
renderTree.renderInDom(container);
|
renderTree.renderInDom(container);
|
||||||
|
@ -66,16 +66,16 @@ Modal.prototype.display = function(title,options) {
|
|||||||
titleText = title;
|
titleText = title;
|
||||||
}
|
}
|
||||||
var headerParser = this.wiki.parseText("text/vnd.tiddlywiki-run",titleText,{parseAsInline: true}),
|
var headerParser = this.wiki.parseText("text/vnd.tiddlywiki-run",titleText,{parseAsInline: true}),
|
||||||
headerRenderTree = new $tw.WikiRenderTree(headerParser,{wiki: $tw.wiki});
|
headerRenderTree = new $tw.WikiRenderTree(headerParser,{wiki: $tw.wiki, context: {tiddlerTitle: title}});
|
||||||
headerRenderTree.execute({tiddlerTitle: title});
|
headerRenderTree.execute();
|
||||||
headerRenderTree.renderInDom(headerTitle);
|
headerRenderTree.renderInDom(headerTitle);
|
||||||
this.wiki.addEventListener("change",function(changes) {
|
this.wiki.addEventListener("change",function(changes) {
|
||||||
headerRenderTree.refreshInDom(changes);
|
headerRenderTree.refreshInDom(changes);
|
||||||
});
|
});
|
||||||
// Render the body of the message
|
// Render the body of the message
|
||||||
var bodyParser = this.wiki.parseTiddler(title),
|
var bodyParser = this.wiki.parseTiddler(title),
|
||||||
bodyRenderTree = new $tw.WikiRenderTree(bodyParser,{wiki: $tw.wiki});
|
bodyRenderTree = new $tw.WikiRenderTree(bodyParser,{wiki: $tw.wiki, context: {tiddlerTitle: title}});
|
||||||
bodyRenderTree.execute({tiddlerTitle: title});
|
bodyRenderTree.execute();
|
||||||
bodyRenderTree.renderInDom(modalBody);
|
bodyRenderTree.renderInDom(modalBody);
|
||||||
this.wiki.addEventListener("change",function(changes) {
|
this.wiki.addEventListener("change",function(changes) {
|
||||||
bodyRenderTree.refreshInDom(changes);
|
bodyRenderTree.refreshInDom(changes);
|
||||||
@ -102,8 +102,8 @@ Modal.prototype.display = function(title,options) {
|
|||||||
footerText = '<$button message="tw-close-tiddler" class="btn btn-primary">Close</$button>';
|
footerText = '<$button message="tw-close-tiddler" class="btn btn-primary">Close</$button>';
|
||||||
}
|
}
|
||||||
var footerParser = this.wiki.parseText("text/vnd.tiddlywiki-run",footerText,{parseAsInline: true}),
|
var footerParser = this.wiki.parseText("text/vnd.tiddlywiki-run",footerText,{parseAsInline: true}),
|
||||||
footerRenderTree = new $tw.WikiRenderTree(footerParser,{wiki: $tw.wiki});
|
footerRenderTree = new $tw.WikiRenderTree(footerParser,{wiki: $tw.wiki, context: {tiddlerTitle: title}});
|
||||||
footerRenderTree.execute({tiddlerTitle: title});
|
footerRenderTree.execute();
|
||||||
footerRenderTree.renderInDom(modalFooterButtons);
|
footerRenderTree.renderInDom(modalFooterButtons);
|
||||||
this.wiki.addEventListener("change",function(changes) {
|
this.wiki.addEventListener("change",function(changes) {
|
||||||
footerRenderTree.refreshInDom(changes);
|
footerRenderTree.refreshInDom(changes);
|
||||||
|
@ -36,8 +36,8 @@ Notifier.prototype.display = function(title,options) {
|
|||||||
$tw.utils.addClass(notification,"tw-notification");
|
$tw.utils.addClass(notification,"tw-notification");
|
||||||
// Render the body of the notification
|
// Render the body of the notification
|
||||||
var bodyParser = this.wiki.parseTiddler(title),
|
var bodyParser = this.wiki.parseTiddler(title),
|
||||||
bodyRenderTree = new $tw.WikiRenderTree(bodyParser,{wiki: $tw.wiki});
|
bodyRenderTree = new $tw.WikiRenderTree(bodyParser,{wiki: $tw.wiki, context: {tiddlerTitle: title}});
|
||||||
bodyRenderTree.execute({tiddlerTitle: title});
|
bodyRenderTree.execute();
|
||||||
bodyRenderTree.renderInDom(notification);
|
bodyRenderTree.renderInDom(notification);
|
||||||
this.wiki.addEventListener("change",function(changes) {
|
this.wiki.addEventListener("change",function(changes) {
|
||||||
bodyRenderTree.refreshInDom(changes);
|
bodyRenderTree.refreshInDom(changes);
|
||||||
|
@ -35,8 +35,8 @@ StylesheetManager.prototype.addStylesheet = function(title) {
|
|||||||
this.stylesheets[title] = true;
|
this.stylesheets[title] = true;
|
||||||
// Parse the tiddler and render as plain text
|
// Parse the tiddler and render as plain text
|
||||||
var parser = this.wiki.parseTiddler(title),
|
var parser = this.wiki.parseTiddler(title),
|
||||||
renderTree = new $tw.WikiRenderTree(parser,{wiki: this.wiki});
|
renderTree = new $tw.WikiRenderTree(parser,{wiki: this.wiki, context: {tiddlerTitle: title}});
|
||||||
renderTree.execute({tiddlerTitle: title});
|
renderTree.execute();
|
||||||
var text = renderTree.render("text/plain");
|
var text = renderTree.render("text/plain");
|
||||||
// Create a style element and put it in the document
|
// Create a style element and put it in the document
|
||||||
var styleNode = document.createElement("style");
|
var styleNode = document.createElement("style");
|
||||||
|
@ -48,21 +48,21 @@ ButtonWidget.prototype.generate = function() {
|
|||||||
// Set the return element
|
// Set the return element
|
||||||
this.tag = "button";
|
this.tag = "button";
|
||||||
this.attributes ={"class": classes.join(" ")};
|
this.attributes ={"class": classes.join(" ")};
|
||||||
this.children = this.renderer.renderTree.createRenderers(this.renderer.renderContext,this.renderer.parseTreeNode.children);
|
this.children = this.renderer.renderTree.createRenderers(this.renderer,this.renderer.parseTreeNode.children);
|
||||||
this.events = events;
|
this.events = events;
|
||||||
};
|
};
|
||||||
|
|
||||||
ButtonWidget.prototype.dispatchMessage = function(event) {
|
ButtonWidget.prototype.dispatchMessage = function(event) {
|
||||||
$tw.utils.dispatchCustomEvent(event.target,this.message,{
|
$tw.utils.dispatchCustomEvent(event.target,this.message,{
|
||||||
param: this.param,
|
param: this.param,
|
||||||
tiddlerTitle: this.renderer.getContextTiddlerTitle()
|
tiddlerTitle: this.renderer.tiddlerTitle
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
ButtonWidget.prototype.triggerPopup = function(event) {
|
ButtonWidget.prototype.triggerPopup = function(event) {
|
||||||
var title = this.popup;
|
var title = this.popup;
|
||||||
if(this.qualifyTiddlerTitles) {
|
if(this.qualifyTiddlerTitles) {
|
||||||
title = title + "-" + this.renderer.getContextScopeId();
|
title = title + "-" + this.renderer.renderTree.getContextScopeId(this.renderer.parentRenderer);
|
||||||
}
|
}
|
||||||
$tw.popup.triggerPopup({
|
$tw.popup.triggerPopup({
|
||||||
domNode: this.renderer.domNode,
|
domNode: this.renderer.domNode,
|
||||||
@ -74,7 +74,7 @@ ButtonWidget.prototype.triggerPopup = function(event) {
|
|||||||
ButtonWidget.prototype.isSelected = function() {
|
ButtonWidget.prototype.isSelected = function() {
|
||||||
var title = this.set;
|
var title = this.set;
|
||||||
if(this.qualifyTiddlerTitles) {
|
if(this.qualifyTiddlerTitles) {
|
||||||
title = title + "-" + this.renderer.getContextScopeId();
|
title = title + "-" + this.renderer.renderTree.getContextScopeId(this.renderer.parentRenderer);
|
||||||
}
|
}
|
||||||
var tiddler = this.renderer.renderTree.wiki.getTiddler(title);
|
var tiddler = this.renderer.renderTree.wiki.getTiddler(title);
|
||||||
return tiddler ? tiddler.fields.text === this.setTo : false;
|
return tiddler ? tiddler.fields.text === this.setTo : false;
|
||||||
@ -83,7 +83,7 @@ ButtonWidget.prototype.isSelected = function() {
|
|||||||
ButtonWidget.prototype.setTiddler = function() {
|
ButtonWidget.prototype.setTiddler = function() {
|
||||||
var title = this.set;
|
var title = this.set;
|
||||||
if(this.qualifyTiddlerTitles) {
|
if(this.qualifyTiddlerTitles) {
|
||||||
title = title + "-" + this.renderer.getContextScopeId();
|
title = title + "-" + this.renderer.renderTree.getContextScopeId(this.renderer.parentRenderer);
|
||||||
}
|
}
|
||||||
var tiddler = this.renderer.renderTree.wiki.getTiddler(title);
|
var tiddler = this.renderer.renderTree.wiki.getTiddler(title);
|
||||||
this.renderer.renderTree.wiki.addTiddler(new $tw.Tiddler(tiddler,{title: title, text: this.setTo}));
|
this.renderer.renderTree.wiki.addTiddler(new $tw.Tiddler(tiddler,{title: title, text: this.setTo}));
|
||||||
@ -120,7 +120,7 @@ ButtonWidget.prototype.refreshInDom = function(changedAttributes,changedTiddlers
|
|||||||
var setTitle = this.set,
|
var setTitle = this.set,
|
||||||
popupTitle = this.popup;
|
popupTitle = this.popup;
|
||||||
if(this.qualifyTiddlerTitles) {
|
if(this.qualifyTiddlerTitles) {
|
||||||
var scopeId = this.renderer.getContextScopeId();
|
var scopeId = this.renderer.renderTree.getContextScopeId(this.renderer.parentRenderer);
|
||||||
if(setTitle) {
|
if(setTitle) {
|
||||||
setTitle = setTitle + "-" + scopeId;
|
setTitle = setTitle + "-" + scopeId;
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,7 @@ var CheckboxWidget = function(renderer) {
|
|||||||
|
|
||||||
CheckboxWidget.prototype.generate = function() {
|
CheckboxWidget.prototype.generate = function() {
|
||||||
// Get the parameters from the attributes
|
// Get the parameters from the attributes
|
||||||
this.tiddlerTitle = this.renderer.getAttribute("tiddler",this.renderer.getContextTiddlerTitle());
|
this.tiddlerTitle = this.renderer.getAttribute("tiddler",this.renderer.tiddlerTitle);
|
||||||
this.tagName = this.renderer.getAttribute("tag");
|
this.tagName = this.renderer.getAttribute("tag");
|
||||||
this["class"] = this.renderer.getAttribute("class");
|
this["class"] = this.renderer.getAttribute("class");
|
||||||
// Compute classes
|
// Compute classes
|
||||||
@ -59,7 +59,7 @@ CheckboxWidget.prototype.generate = function() {
|
|||||||
// Set the return element
|
// Set the return element
|
||||||
this.tag = "label";
|
this.tag = "label";
|
||||||
this.attributes ={"class": classes.join(" ")};
|
this.attributes ={"class": classes.join(" ")};
|
||||||
this.children = this.renderer.renderTree.createRenderers(this.renderer.renderContext,[nodeCheckbox,nodeSpan]);
|
this.children = this.renderer.renderTree.createRenderers(this.renderer,[nodeCheckbox,nodeSpan]);
|
||||||
this.events = [{name: "change", handlerObject: this, handlerMethod: "handleChangeEvent"}];
|
this.events = [{name: "change", handlerObject: this, handlerMethod: "handleChangeEvent"}];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ var EditWidget = function(renderer) {
|
|||||||
|
|
||||||
EditWidget.prototype.generate = function() {
|
EditWidget.prototype.generate = function() {
|
||||||
// Get parameters from our attributes
|
// Get parameters from our attributes
|
||||||
this.tiddlerTitle = this.renderer.getAttribute("tiddler",this.renderer.getContextTiddlerTitle());
|
this.tiddlerTitle = this.renderer.getAttribute("tiddler",this.renderer.tiddlerTitle);
|
||||||
this.fieldName = this.renderer.getAttribute("field","text");
|
this.fieldName = this.renderer.getAttribute("field","text");
|
||||||
// Choose the editor to use
|
// Choose the editor to use
|
||||||
// TODO: Tiddler field modules should be able to specify a field type from which the editor is derived
|
// TODO: Tiddler field modules should be able to specify a field type from which the editor is derived
|
||||||
|
@ -88,7 +88,7 @@ TextEditor.prototype.render = function() {
|
|||||||
this.editWidget.attributes.style = this.editWidget.attributes.style || "";
|
this.editWidget.attributes.style = this.editWidget.attributes.style || "";
|
||||||
this.editWidget.attributes.style += this.editWidget.renderer.parseTreeNode.attributes.style.value;
|
this.editWidget.attributes.style += this.editWidget.renderer.parseTreeNode.attributes.style.value;
|
||||||
}
|
}
|
||||||
this.editWidget.children = this.editWidget.renderer.renderTree.createRenderers(this.editWidget.renderer.renderContext,[node]);
|
this.editWidget.children = this.editWidget.renderer.renderTree.createRenderers(this.editWidget.renderer,[node]);
|
||||||
this.editWidget.events = [
|
this.editWidget.events = [
|
||||||
{name: "focus", handlerObject: this},
|
{name: "focus", handlerObject: this},
|
||||||
{name: "blur", handlerObject: this},
|
{name: "blur", handlerObject: this},
|
||||||
|
@ -40,7 +40,7 @@ EncryptWidget.prototype.generate = function() {
|
|||||||
// Set the return element
|
// Set the return element
|
||||||
this.tag = "pre";
|
this.tag = "pre";
|
||||||
this.attributes ={"class": "tw-encrypt"};
|
this.attributes ={"class": "tw-encrypt"};
|
||||||
this.children = this.renderer.renderTree.createRenderers(this.renderer.renderContext,[{
|
this.children = this.renderer.renderTree.createRenderers(this.renderer,[{
|
||||||
type: "text",
|
type: "text",
|
||||||
text: encryptedText
|
text: encryptedText
|
||||||
}]);
|
}]);
|
||||||
|
@ -26,7 +26,7 @@ ErrorWidget.prototype.generate = function() {
|
|||||||
this.attributes = {
|
this.attributes = {
|
||||||
"class": "tw-error-widget"
|
"class": "tw-error-widget"
|
||||||
};
|
};
|
||||||
this.children = this.renderer.renderTree.createRenderers(this.renderer.renderContext,[{
|
this.children = this.renderer.renderTree.createRenderers(this.renderer,[{
|
||||||
type: "text",
|
type: "text",
|
||||||
text: this.errorMessage
|
text: this.errorMessage
|
||||||
}]);
|
}]);
|
||||||
|
@ -21,7 +21,7 @@ var FieldGridWidget = function(renderer) {
|
|||||||
|
|
||||||
FieldGridWidget.prototype.generate = function() {
|
FieldGridWidget.prototype.generate = function() {
|
||||||
// Get attributes
|
// Get attributes
|
||||||
this.tiddlerTitle = this.renderer.getAttribute("tiddler",this.renderer.getContextTiddlerTitle());
|
this.tiddlerTitle = this.renderer.getAttribute("tiddler",this.renderer.tiddlerTitle);
|
||||||
this.exclude = this.renderer.getAttribute("exclude");
|
this.exclude = this.renderer.getAttribute("exclude");
|
||||||
this["class"] = this.renderer.getAttribute("class");
|
this["class"] = this.renderer.getAttribute("class");
|
||||||
// Set up the exclusion array
|
// Set up the exclusion array
|
||||||
@ -73,7 +73,7 @@ FieldGridWidget.prototype.generate = function() {
|
|||||||
// Return the table element
|
// Return the table element
|
||||||
this.tag = "table";
|
this.tag = "table";
|
||||||
this.attributes ={"class": classes.join(" ")};
|
this.attributes ={"class": classes.join(" ")};
|
||||||
this.children = this.renderer.renderTree.createRenderers(this.renderer.renderContext,[{
|
this.children = this.renderer.renderTree.createRenderers(this.renderer,[{
|
||||||
type: "element",
|
type: "element",
|
||||||
tag: "tbody",
|
tag: "tbody",
|
||||||
children: rows
|
children: rows
|
||||||
|
@ -21,7 +21,7 @@ var FieldsWidget = function(renderer) {
|
|||||||
|
|
||||||
FieldsWidget.prototype.generate = function() {
|
FieldsWidget.prototype.generate = function() {
|
||||||
// Get parameters from our attributes
|
// Get parameters from our attributes
|
||||||
this.tiddlerTitle = this.renderer.getAttribute("tiddler",this.renderer.getContextTiddlerTitle());
|
this.tiddlerTitle = this.renderer.getAttribute("tiddler",this.renderer.tiddlerTitle);
|
||||||
this.template = this.renderer.getAttribute("template");
|
this.template = this.renderer.getAttribute("template");
|
||||||
this.exclude = this.renderer.getAttribute("exclude");
|
this.exclude = this.renderer.getAttribute("exclude");
|
||||||
this.stripTitlePrefix = this.renderer.getAttribute("stripTitlePrefix","no") === "yes";
|
this.stripTitlePrefix = this.renderer.getAttribute("stripTitlePrefix","no") === "yes";
|
||||||
@ -75,7 +75,7 @@ FieldsWidget.prototype.generate = function() {
|
|||||||
this.attributes.title = this.renderer.getAttribute("tooltip");
|
this.attributes.title = this.renderer.getAttribute("tooltip");
|
||||||
}
|
}
|
||||||
// Create the renderers for the wrapper and the children
|
// Create the renderers for the wrapper and the children
|
||||||
this.children = this.renderer.renderTree.createRenderers(this.renderer.renderContext,[{
|
this.children = this.renderer.renderTree.createRenderers(this.renderer,[{
|
||||||
type: "text",
|
type: "text",
|
||||||
text: text.join("")
|
text: text.join("")
|
||||||
}]);
|
}]);
|
||||||
|
@ -60,7 +60,7 @@ ImportWidget.prototype.generate = function() {
|
|||||||
this.attributes = {
|
this.attributes = {
|
||||||
"class": classes.join(" ")
|
"class": classes.join(" ")
|
||||||
};
|
};
|
||||||
this.children = this.renderer.renderTree.createRenderers(this.renderer.renderContext,[fileInput,container]);
|
this.children = this.renderer.renderTree.createRenderers(this.renderer,[fileInput,container]);
|
||||||
};
|
};
|
||||||
|
|
||||||
ImportWidget.prototype.handleChangeEvent = function(event) {
|
ImportWidget.prototype.handleChangeEvent = function(event) {
|
||||||
|
@ -25,7 +25,7 @@ InfoWidget.types = {
|
|||||||
|
|
||||||
InfoWidget.prototype.generate = function() {
|
InfoWidget.prototype.generate = function() {
|
||||||
// Get attributes
|
// Get attributes
|
||||||
this.tiddlerTitle = this.renderer.getAttribute("tiddler",this.renderer.getContextTiddlerTitle());
|
this.tiddlerTitle = this.renderer.getAttribute("tiddler",this.tiddlerTitle);
|
||||||
this.type = this.renderer.getAttribute("type","changecount");
|
this.type = this.renderer.getAttribute("type","changecount");
|
||||||
// Get the appropriate value for the current tiddler
|
// Get the appropriate value for the current tiddler
|
||||||
var value = "",
|
var value = "",
|
||||||
@ -39,7 +39,7 @@ InfoWidget.prototype.generate = function() {
|
|||||||
// Set the element
|
// Set the element
|
||||||
this.tag = "span";
|
this.tag = "span";
|
||||||
this.attributes = {};
|
this.attributes = {};
|
||||||
this.children = this.renderer.renderTree.createRenderers(this.renderer.renderContext,[{
|
this.children = this.renderer.renderTree.createRenderers(this.renderer,[{
|
||||||
type: "text",
|
type: "text",
|
||||||
text: value
|
text: value
|
||||||
}]);
|
}]);
|
||||||
|
@ -31,7 +31,7 @@ LinkWidget.prototype.generate = function() {
|
|||||||
this.qualifyHoverTitles = this.renderer.getAttribute("qualifyHoverTitles");
|
this.qualifyHoverTitles = this.renderer.getAttribute("qualifyHoverTitles");
|
||||||
// Qualify the hover tiddler title if needed
|
// Qualify the hover tiddler title if needed
|
||||||
if(this.qualifyHoverTitles) {
|
if(this.qualifyHoverTitles) {
|
||||||
this.hover = this.hover + "-" + this.renderer.getContextScopeId();
|
this.hover = this.hover + "-" + this.renderer.renderTree.getContextScopeId(this.renderer.parentRenderer);
|
||||||
}
|
}
|
||||||
// Determine the default link characteristics
|
// Determine the default link characteristics
|
||||||
this.isExternal = isLinkExternal(this.to);
|
this.isExternal = isLinkExternal(this.to);
|
||||||
@ -66,7 +66,7 @@ LinkWidget.prototype.generate = function() {
|
|||||||
events.push({name: "mouseout", handlerObject: this, handlerMethod: "handleMouseOverOrOutEvent"});
|
events.push({name: "mouseout", handlerObject: this, handlerMethod: "handleMouseOverOrOutEvent"});
|
||||||
}
|
}
|
||||||
// Get the value of the tw-wikilinks configuration macro
|
// Get the value of the tw-wikilinks configuration macro
|
||||||
var wikiLinksMacro = this.renderer.findMacroDefinition("tw-wikilinks"),
|
var wikiLinksMacro = this.renderer.renderTree.findMacroDefinition(this.renderer.parentRenderer,"tw-wikilinks"),
|
||||||
useWikiLinks = wikiLinksMacro ? !(wikiLinksMacro.text.trim() === "no") : true;
|
useWikiLinks = wikiLinksMacro ? !(wikiLinksMacro.text.trim() === "no") : true;
|
||||||
// Set up the element
|
// Set up the element
|
||||||
if(useWikiLinks) {
|
if(useWikiLinks) {
|
||||||
@ -77,7 +77,7 @@ LinkWidget.prototype.generate = function() {
|
|||||||
if(this.isExternal) {
|
if(this.isExternal) {
|
||||||
this.attributes.href = this.to;
|
this.attributes.href = this.to;
|
||||||
} else {
|
} else {
|
||||||
var wikiLinkTemplateMacro = this.renderer.findMacroDefinition("tw-wikilink-template"),
|
var wikiLinkTemplateMacro = this.renderer.renderTree.findMacroDefinition(this.renderer.parentRenderer,"tw-wikilink-template"),
|
||||||
wikiLinkTemplate = wikiLinkTemplateMacro ? wikiLinkTemplateMacro.text.trim() : "$uri_encoded$";
|
wikiLinkTemplate = wikiLinkTemplateMacro ? wikiLinkTemplateMacro.text.trim() : "$uri_encoded$";
|
||||||
this.wikiLinkText = wikiLinkTemplate.replace("$uri_encoded$",encodeURIComponent(this.to));
|
this.wikiLinkText = wikiLinkTemplate.replace("$uri_encoded$",encodeURIComponent(this.to));
|
||||||
this.wikiLinkText = this.wikiLinkText.replace("$uri_doubleencoded$",encodeURIComponent(encodeURIComponent(this.to)));
|
this.wikiLinkText = this.wikiLinkText.replace("$uri_doubleencoded$",encodeURIComponent(encodeURIComponent(this.to)));
|
||||||
@ -87,7 +87,7 @@ LinkWidget.prototype.generate = function() {
|
|||||||
} else {
|
} else {
|
||||||
this.tag = "span";
|
this.tag = "span";
|
||||||
}
|
}
|
||||||
this.children = this.renderer.renderTree.createRenderers(this.renderer.renderContext,this.renderer.parseTreeNode.children);
|
this.children = this.renderer.renderTree.createRenderers(this.renderer,this.renderer.parseTreeNode.children);
|
||||||
};
|
};
|
||||||
|
|
||||||
LinkWidget.prototype.handleClickEvent = function(event) {
|
LinkWidget.prototype.handleClickEvent = function(event) {
|
||||||
|
@ -29,7 +29,7 @@ LinkCatcherWidget.prototype.generate = function() {
|
|||||||
this.attributes = {
|
this.attributes = {
|
||||||
"class": "tw-linkcatcher"
|
"class": "tw-linkcatcher"
|
||||||
};
|
};
|
||||||
this.children = this.renderer.renderTree.createRenderers(this.renderer.renderContext,this.renderer.parseTreeNode.children);
|
this.children = this.renderer.renderTree.createRenderers(this.renderer,this.renderer.parseTreeNode.children);
|
||||||
this.events = [
|
this.events = [
|
||||||
{name: "tw-navigate", handlerObject: this, handlerMethod: "handleNavigateEvent"}
|
{name: "tw-navigate", handlerObject: this, handlerMethod: "handleNavigateEvent"}
|
||||||
];
|
];
|
||||||
@ -47,7 +47,7 @@ LinkCatcherWidget.prototype.refreshInDom = function(changedAttributes,changedTid
|
|||||||
// Navigate to a specified tiddler
|
// Navigate to a specified tiddler
|
||||||
LinkCatcherWidget.prototype.handleNavigateEvent = function(event) {
|
LinkCatcherWidget.prototype.handleNavigateEvent = function(event) {
|
||||||
if(this.to) {
|
if(this.to) {
|
||||||
this.renderer.renderTree.wiki.setTextReference(this.to,event.navigateTo,this.renderer.getContextTiddlerTitle());
|
this.renderer.renderTree.wiki.setTextReference(this.to,event.navigateTo,this.renderer.tiddlerTitle);
|
||||||
}
|
}
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
return false;
|
return false;
|
||||||
|
@ -59,7 +59,7 @@ ListWidget.prototype.generate = function() {
|
|||||||
this.attributes = {
|
this.attributes = {
|
||||||
"class": "tw-list-frame"
|
"class": "tw-list-frame"
|
||||||
};
|
};
|
||||||
this.children = this.renderer.renderTree.createRenderers(this.renderer.renderContext,listMembers);
|
this.children = this.renderer.renderTree.createRenderers(this.renderer,listMembers);
|
||||||
};
|
};
|
||||||
|
|
||||||
ListWidget.prototype.getTiddlerList = function() {
|
ListWidget.prototype.getTiddlerList = function() {
|
||||||
@ -72,7 +72,7 @@ ListWidget.prototype.getTiddlerList = function() {
|
|||||||
if(!filter) {
|
if(!filter) {
|
||||||
filter = "[!is[system]]";
|
filter = "[!is[system]]";
|
||||||
}
|
}
|
||||||
this.list = this.renderer.renderTree.wiki.filterTiddlers(filter,this.renderer.getContextTiddlerTitle());
|
this.list = this.renderer.renderTree.wiki.filterTiddlers(filter,this.renderer.tiddlerTitle);
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -253,7 +253,7 @@ ListWidget.prototype.handleListChanges = function(changedTiddlers) {
|
|||||||
this.removeListElement(t);
|
this.removeListElement(t);
|
||||||
}
|
}
|
||||||
// Insert the empty message
|
// Insert the empty message
|
||||||
this.children = this.renderer.renderTree.createRenderers(this.renderer.renderContext,[this.getEmptyMessage()]);
|
this.children = this.renderer.renderTree.createRenderers(this.renderer,[this.getEmptyMessage()]);
|
||||||
$tw.utils.each(this.children,function(node) {
|
$tw.utils.each(this.children,function(node) {
|
||||||
if(node.renderInDom) {
|
if(node.renderInDom) {
|
||||||
self.renderer.domNode.appendChild(node.renderInDom());
|
self.renderer.domNode.appendChild(node.renderInDom());
|
||||||
@ -273,7 +273,7 @@ ListWidget.prototype.handleListChanges = function(changedTiddlers) {
|
|||||||
var index = this.findListElementByTitle(t,this.list[t]);
|
var index = this.findListElementByTitle(t,this.list[t]);
|
||||||
if(index === undefined) {
|
if(index === undefined) {
|
||||||
// The list element isn't there, so we need to insert it
|
// The list element isn't there, so we need to insert it
|
||||||
this.children.splice(t,0,this.renderer.renderTree.createRenderer(this.renderer.renderContext,this.createListElement(this.list[t])));
|
this.children.splice(t,0,this.renderer.renderTree.createRenderer(this.renderer,this.createListElement(this.list[t])));
|
||||||
this.renderer.domNode.insertBefore(this.children[t].renderInDom(),this.renderer.domNode.childNodes[t]);
|
this.renderer.domNode.insertBefore(this.children[t].renderInDom(),this.renderer.domNode.childNodes[t]);
|
||||||
// Ask the listview to animate the insertion
|
// Ask the listview to animate the insertion
|
||||||
if(this.listview && this.listview.insert) {
|
if(this.listview && this.listview.insert) {
|
||||||
|
@ -28,7 +28,7 @@ NavigatorWidget.prototype.generate = function() {
|
|||||||
this.attributes = {
|
this.attributes = {
|
||||||
"class": "tw-navigator"
|
"class": "tw-navigator"
|
||||||
};
|
};
|
||||||
this.children = this.renderer.renderTree.createRenderers(this.renderer.renderContext,this.renderer.parseTreeNode.children);
|
this.children = this.renderer.renderTree.createRenderers(this.renderer,this.renderer.parseTreeNode.children);
|
||||||
this.events = [
|
this.events = [
|
||||||
{name: "tw-navigate", handlerObject: this, handlerMethod: "handleNavigateEvent"},
|
{name: "tw-navigate", handlerObject: this, handlerMethod: "handleNavigateEvent"},
|
||||||
{name: "tw-edit-tiddler", handlerObject: this, handlerMethod: "handleEditTiddlerEvent"},
|
{name: "tw-edit-tiddler", handlerObject: this, handlerMethod: "handleEditTiddlerEvent"},
|
||||||
|
@ -31,7 +31,7 @@ RevealWidget.prototype.generate = function() {
|
|||||||
// Compute the title of the state tiddler and read it
|
// Compute the title of the state tiddler and read it
|
||||||
this.stateTitle = this.state;
|
this.stateTitle = this.state;
|
||||||
if(this.qualifyTiddlerTitles) {
|
if(this.qualifyTiddlerTitles) {
|
||||||
this.stateTitle = this.stateTitle + "-" + this.renderer.getContextScopeId();
|
this.stateTitle = this.stateTitle + "-" + this.renderer.renderTree.getContextScopeId(this.renderer.parentRenderer);
|
||||||
}
|
}
|
||||||
this.readState();
|
this.readState();
|
||||||
// Set up the element attributes
|
// Set up the element attributes
|
||||||
@ -53,7 +53,7 @@ RevealWidget.prototype.generate = function() {
|
|||||||
"class": classes.join(" "),
|
"class": classes.join(" "),
|
||||||
style: styles.join("")
|
style: styles.join("")
|
||||||
};
|
};
|
||||||
this.children = this.renderer.renderTree.createRenderers(this.renderer.renderContext,this.isOpen ? this.renderer.parseTreeNode.children : []);
|
this.children = this.renderer.renderTree.createRenderers(this.renderer,this.isOpen ? this.renderer.parseTreeNode.children : []);
|
||||||
this.events = [{name: "click", handlerObject: this, handlerMethod: "handleClickEvent"}];
|
this.events = [{name: "click", handlerObject: this, handlerMethod: "handleClickEvent"}];
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -63,7 +63,7 @@ Read the state tiddler
|
|||||||
RevealWidget.prototype.readState = function() {
|
RevealWidget.prototype.readState = function() {
|
||||||
// Read the information from the state tiddler
|
// Read the information from the state tiddler
|
||||||
if(this.stateTitle) {
|
if(this.stateTitle) {
|
||||||
var state = this.renderer.renderTree.wiki.getTextReference(this.stateTitle,this["default"],this.renderer.getContextTiddlerTitle());
|
var state = this.renderer.renderTree.wiki.getTextReference(this.stateTitle,this["default"],this.renderer.tiddlerTitle);
|
||||||
switch(this.type) {
|
switch(this.type) {
|
||||||
case "popup":
|
case "popup":
|
||||||
this.readPopupState(state);
|
this.readPopupState(state);
|
||||||
@ -129,7 +129,7 @@ RevealWidget.prototype.refreshInDom = function(changedAttributes,changedTiddlers
|
|||||||
this.readState();
|
this.readState();
|
||||||
// Construct the child nodes if required
|
// Construct the child nodes if required
|
||||||
if(this.isOpen && this.children.length === 0) {
|
if(this.isOpen && this.children.length === 0) {
|
||||||
this.children = this.renderer.renderTree.createRenderers(this.renderer.renderContext,this.renderer.parseTreeNode.children);
|
this.children = this.renderer.renderTree.createRenderers(this.renderer,this.renderer.parseTreeNode.children);
|
||||||
var parentNode = this.renderer.domNode;
|
var parentNode = this.renderer.domNode;
|
||||||
$tw.utils.each(this.children,function(child) {
|
$tw.utils.each(this.children,function(child) {
|
||||||
parentNode.appendChild(child.renderInDom());
|
parentNode.appendChild(child.renderInDom());
|
||||||
|
@ -32,7 +32,7 @@ SetStyleWidget.prototype.generate = function() {
|
|||||||
if(this["class"]) {
|
if(this["class"]) {
|
||||||
this.attributes["class"] = this["class"];
|
this.attributes["class"] = this["class"];
|
||||||
}
|
}
|
||||||
this.children = this.renderer.renderTree.createRenderers(this.renderer.renderContext,this.renderer.parseTreeNode.children);
|
this.children = this.renderer.renderTree.createRenderers(this.renderer,this.renderer.parseTreeNode.children);
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.setstyle = SetStyleWidget;
|
exports.setstyle = SetStyleWidget;
|
||||||
|
@ -56,7 +56,7 @@ var TranscludeWidget = function(renderer) {
|
|||||||
TranscludeWidget.prototype.generate = function() {
|
TranscludeWidget.prototype.generate = function() {
|
||||||
var tr, templateParseTree, templateTiddler;
|
var tr, templateParseTree, templateTiddler;
|
||||||
// Get the render target details
|
// Get the render target details
|
||||||
this.targetTitle = this.renderer.getAttribute("target",this.renderer.getContextTiddlerTitle());
|
this.targetTitle = this.renderer.getAttribute("target",this.renderer.tiddlerTitle);
|
||||||
this.targetField = this.renderer.getAttribute("field");
|
this.targetField = this.renderer.getAttribute("field");
|
||||||
this.targetIndex = this.renderer.getAttribute("index");
|
this.targetIndex = this.renderer.getAttribute("index");
|
||||||
// Get the render tree for the template
|
// Get the render tree for the template
|
||||||
@ -67,7 +67,7 @@ TranscludeWidget.prototype.generate = function() {
|
|||||||
} else {
|
} else {
|
||||||
this.templateTitle = this.renderer.getAttribute("template",this.targetTitle);
|
this.templateTitle = this.renderer.getAttribute("template",this.targetTitle);
|
||||||
// Check for recursion
|
// Check for recursion
|
||||||
if(this.renderer.checkContextRecursion({
|
if(this.renderer.renderTree.checkContextRecursion(this.renderer.parentRenderer,{
|
||||||
tiddlerTitle: this.targetTitle,
|
tiddlerTitle: this.targetTitle,
|
||||||
templateTitle: this.templateTitle
|
templateTitle: this.templateTitle
|
||||||
})) {
|
})) {
|
||||||
@ -101,11 +101,10 @@ TranscludeWidget.prototype.generate = function() {
|
|||||||
if(!this.renderer.renderTree.wiki.tiddlerExists(this.targetTitle) && !this.renderer.renderTree.wiki.isShadowTiddler(this.targetTitle)) {
|
if(!this.renderer.renderTree.wiki.tiddlerExists(this.targetTitle) && !this.renderer.renderTree.wiki.isShadowTiddler(this.targetTitle)) {
|
||||||
$tw.utils.pushTop(classes,"tw-tiddler-missing");
|
$tw.utils.pushTop(classes,"tw-tiddler-missing");
|
||||||
}
|
}
|
||||||
// Create the renderers for the wrapper and the children
|
// Save the context for this renderer node
|
||||||
var newRenderContext = {
|
this.renderer.context = {
|
||||||
tiddlerTitle: this.targetTitle,
|
tiddlerTitle: this.targetTitle,
|
||||||
templateTitle: this.templateTitle,
|
templateTitle: this.templateTitle
|
||||||
parentContext: this.renderer.renderContext
|
|
||||||
};
|
};
|
||||||
// Set the element
|
// Set the element
|
||||||
this.tag = this.renderer.parseTreeNode.isBlock ? "div" : "span";
|
this.tag = this.renderer.parseTreeNode.isBlock ? "div" : "span";
|
||||||
@ -119,7 +118,7 @@ TranscludeWidget.prototype.generate = function() {
|
|||||||
if(this.renderer.hasAttribute("tooltip")) {
|
if(this.renderer.hasAttribute("tooltip")) {
|
||||||
this.attributes.title = this.renderer.getAttribute("tooltip");
|
this.attributes.title = this.renderer.getAttribute("tooltip");
|
||||||
}
|
}
|
||||||
this.children = this.renderer.renderTree.createRenderers(newRenderContext,templateParseTree);
|
this.children = this.renderer.renderTree.createRenderers(this.renderer,templateParseTree);
|
||||||
};
|
};
|
||||||
|
|
||||||
TranscludeWidget.prototype.refreshInDom = function(changedAttributes,changedTiddlers) {
|
TranscludeWidget.prototype.refreshInDom = function(changedAttributes,changedTiddlers) {
|
||||||
|
@ -23,7 +23,7 @@ VersionWidget.prototype.generate = function() {
|
|||||||
// Set the element
|
// Set the element
|
||||||
this.tag = "span";
|
this.tag = "span";
|
||||||
this.attributes = {};
|
this.attributes = {};
|
||||||
this.children = this.renderer.renderTree.createRenderers(this.renderer.renderContext,[{
|
this.children = this.renderer.renderTree.createRenderers(this.renderer,[{
|
||||||
type: "text",
|
type: "text",
|
||||||
text: $tw.version
|
text: $tw.version
|
||||||
}]);
|
}]);
|
||||||
|
@ -57,7 +57,7 @@ VideoWidget.prototype.generate = function() {
|
|||||||
default:
|
default:
|
||||||
this.tag = "div";
|
this.tag = "div";
|
||||||
this.attributes = {};
|
this.attributes = {};
|
||||||
this.children = this.renderer.renderTree.createRenderers(this.renderer.renderContext,[{
|
this.children = this.renderer.renderTree.createRenderers(this.renderer,[{
|
||||||
type: "text",
|
type: "text",
|
||||||
text: "Unknown video type"
|
text: "Unknown video type"
|
||||||
}]);
|
}]);
|
||||||
|
@ -54,7 +54,7 @@ var ViewWidget = function(renderer) {
|
|||||||
|
|
||||||
ViewWidget.prototype.generate = function() {
|
ViewWidget.prototype.generate = function() {
|
||||||
// Get parameters from our attributes
|
// Get parameters from our attributes
|
||||||
this.tiddlerTitle = this.renderer.getAttribute("tiddler",this.renderer.getContextTiddlerTitle());
|
this.tiddlerTitle = this.renderer.getAttribute("tiddler",this.renderer.tiddlerTitle);
|
||||||
this.fieldName = this.renderer.getAttribute("field","text");
|
this.fieldName = this.renderer.getAttribute("field","text");
|
||||||
this.format = this.renderer.getAttribute("format","text");
|
this.format = this.renderer.getAttribute("format","text");
|
||||||
// Get the value to display
|
// Get the value to display
|
||||||
|
@ -30,7 +30,7 @@ DateViewer.prototype.render = function() {
|
|||||||
this.viewWidget.attributes = {
|
this.viewWidget.attributes = {
|
||||||
"class": "tw-view-date"
|
"class": "tw-view-date"
|
||||||
};
|
};
|
||||||
this.viewWidget.children = this.viewWidget.renderer.renderTree.createRenderers(this.viewWidget.renderer.renderContext,[{
|
this.viewWidget.children = this.viewWidget.renderer.renderTree.createRenderers(this.viewWidget.renderer,[{
|
||||||
type: "text",
|
type: "text",
|
||||||
text: value
|
text: value
|
||||||
}]);
|
}]);
|
||||||
|
@ -33,7 +33,7 @@ HtmlEncodedViewer.prototype.render = function() {
|
|||||||
this.viewWidget.attributes = {
|
this.viewWidget.attributes = {
|
||||||
"class": "tw-view-htmlencoded"
|
"class": "tw-view-htmlencoded"
|
||||||
};
|
};
|
||||||
this.viewWidget.children = this.viewWidget.renderer.renderTree.createRenderers(this.viewWidget.renderer.renderContext,[{
|
this.viewWidget.children = this.viewWidget.renderer.renderTree.createRenderers(this.viewWidget.renderer,[{
|
||||||
type: "text",
|
type: "text",
|
||||||
text: $tw.utils.htmlEncode(value)
|
text: $tw.utils.htmlEncode(value)
|
||||||
}]);
|
}]);
|
||||||
|
@ -21,20 +21,17 @@ var HtmlWikifiedViewer = function(viewWidget,tiddler,field,value) {
|
|||||||
|
|
||||||
HtmlWikifiedViewer.prototype.render = function() {
|
HtmlWikifiedViewer.prototype.render = function() {
|
||||||
// Parse the field text
|
// Parse the field text
|
||||||
var newRenderContext = {
|
|
||||||
parentContext: this.viewWidget.renderer.renderContext
|
|
||||||
};
|
|
||||||
var wiki = this.viewWidget.renderer.renderTree.wiki,
|
var wiki = this.viewWidget.renderer.renderTree.wiki,
|
||||||
parser = wiki.parseText("text/vnd.tiddlywiki",this.value),
|
parser = wiki.parseText("text/vnd.tiddlywiki",this.value),
|
||||||
renderTree = new $tw.WikiRenderTree(parser,{wiki: wiki});
|
renderTree = new $tw.WikiRenderTree(parser,{wiki: wiki});
|
||||||
renderTree.execute(newRenderContext);
|
renderTree.execute();
|
||||||
var text = renderTree.render("text/html");
|
var text = renderTree.render("text/html");
|
||||||
// Set the element details
|
// Set the element details
|
||||||
this.viewWidget.tag = "pre";
|
this.viewWidget.tag = "pre";
|
||||||
this.viewWidget.attributes = {
|
this.viewWidget.attributes = {
|
||||||
"class": "tw-view-htmlwikified"
|
"class": "tw-view-htmlwikified"
|
||||||
};
|
};
|
||||||
this.viewWidget.children = this.viewWidget.renderer.renderTree.createRenderers(this.viewWidget.renderer.renderContext,[{
|
this.viewWidget.children = this.viewWidget.renderer.renderTree.createRenderers(this.viewWidget.renderer,[{
|
||||||
type: "text",
|
type: "text",
|
||||||
text: text
|
text: text
|
||||||
}]);
|
}]);
|
||||||
|
@ -33,7 +33,7 @@ JsEncodedViewer.prototype.render = function() {
|
|||||||
this.viewWidget.attributes = {
|
this.viewWidget.attributes = {
|
||||||
"class": "tw-view-jsencoded"
|
"class": "tw-view-jsencoded"
|
||||||
};
|
};
|
||||||
this.viewWidget.children = this.viewWidget.renderer.renderTree.createRenderers(this.viewWidget.renderer.renderContext,[{
|
this.viewWidget.children = this.viewWidget.renderer.renderTree.createRenderers(this.viewWidget.renderer,[{
|
||||||
type: "text",
|
type: "text",
|
||||||
text: $tw.utils.stringify(value)
|
text: $tw.utils.stringify(value)
|
||||||
}]);
|
}]);
|
||||||
|
@ -26,7 +26,7 @@ LinkViewer.prototype.render = function() {
|
|||||||
this.viewWidget.attributes = {
|
this.viewWidget.attributes = {
|
||||||
"class": "tw-view-link"
|
"class": "tw-view-link"
|
||||||
};
|
};
|
||||||
this.viewWidget.children = this.viewWidget.renderer.renderTree.createRenderers(this.viewWidget.renderer.renderContext,[{
|
this.viewWidget.children = this.viewWidget.renderer.renderTree.createRenderers(this.viewWidget.renderer,[{
|
||||||
type: "element",
|
type: "element",
|
||||||
tag: "$link",
|
tag: "$link",
|
||||||
attributes: {
|
attributes: {
|
||||||
|
@ -30,7 +30,7 @@ RelativeDateViewer.prototype.render = function() {
|
|||||||
this.viewWidget.attributes = {
|
this.viewWidget.attributes = {
|
||||||
"class": "tw-view-date"
|
"class": "tw-view-date"
|
||||||
};
|
};
|
||||||
this.viewWidget.children = this.viewWidget.renderer.renderTree.createRenderers(this.viewWidget.renderer.renderContext,[{
|
this.viewWidget.children = this.viewWidget.renderer.renderTree.createRenderers(this.viewWidget.renderer,[{
|
||||||
type: "text",
|
type: "text",
|
||||||
text: value
|
text: value
|
||||||
}]);
|
}]);
|
||||||
|
@ -35,7 +35,7 @@ WikifiedViewer.prototype.render = function() {
|
|||||||
if(this.tiddler && this.tiddler.fields.title) {
|
if(this.tiddler && this.tiddler.fields.title) {
|
||||||
node.attributes.target = {type: "string", value: this.tiddler.fields.title}
|
node.attributes.target = {type: "string", value: this.tiddler.fields.title}
|
||||||
}
|
}
|
||||||
this.viewWidget.children = this.viewWidget.renderer.renderTree.createRenderers(this.viewWidget.renderer.renderContext,[node]);
|
this.viewWidget.children = this.viewWidget.renderer.renderTree.createRenderers(this.viewWidget.renderer,[node]);
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.wikified = WikifiedViewer;
|
exports.wikified = WikifiedViewer;
|
||||||
|
@ -565,10 +565,10 @@ Parse text from a tiddler and render it into another format
|
|||||||
outputType: content type for the output
|
outputType: content type for the output
|
||||||
title: title of the tiddler to be rendered
|
title: title of the tiddler to be rendered
|
||||||
*/
|
*/
|
||||||
exports.renderTiddler = function(outputType,title,renderContext) {
|
exports.renderTiddler = function(outputType,title,context) {
|
||||||
var parser = this.parseTiddler(title),
|
var parser = this.parseTiddler(title),
|
||||||
renderTree = new $tw.WikiRenderTree(parser,{wiki: this});
|
renderTree = new $tw.WikiRenderTree(parser,{wiki: this, context: context});
|
||||||
renderTree.execute(renderContext);
|
renderTree.execute();
|
||||||
return renderTree.render(outputType);
|
return renderTree.render(outputType);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ StripCommentsViewer.prototype.render = function() {
|
|||||||
// Set the element details
|
// Set the element details
|
||||||
this.viewWidget.tag = "span";
|
this.viewWidget.tag = "span";
|
||||||
this.viewWidget.attributes = {};
|
this.viewWidget.attributes = {};
|
||||||
this.viewWidget.children = this.viewWidget.renderer.renderTree.createRenderers(this.viewWidget.renderer.renderContext,[{
|
this.viewWidget.children = this.viewWidget.renderer.renderTree.createRenderers(this.viewWidget.renderer,[{
|
||||||
type: "text",
|
type: "text",
|
||||||
text: value
|
text: value
|
||||||
}]);
|
}]);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user