mirror of
				https://github.com/Jermolene/TiddlyWiki5
				synced 2025-11-04 01:23:01 +00:00 
			
		
		
		
	Split "transclude" widget into a separate "tiddler" and "transclude" widget
Belatedly realised that the design would be clearer without these two separate concepts being conflated into a single widget. As a result of this change, any other widget or template that generates transclude widgets has needed adjustment.
This commit is contained in:
		@@ -42,34 +42,40 @@ exports.parse = function() {
 | 
				
			|||||||
		template = $tw.utils.trim(this.match[3]),
 | 
							template = $tw.utils.trim(this.match[3]),
 | 
				
			||||||
		style = this.match[4],
 | 
							style = this.match[4],
 | 
				
			||||||
		classes = this.match[5];
 | 
							classes = this.match[5];
 | 
				
			||||||
	// Return the transclude widget
 | 
						// Prepare the transclude widget
 | 
				
			||||||
	var node = {
 | 
						var transcludeNode = {
 | 
				
			||||||
 | 
								type: "element",
 | 
				
			||||||
 | 
								tag: "$transclude",
 | 
				
			||||||
 | 
								attributes: {
 | 
				
			||||||
 | 
									title: {type: "string", value: template || targetTitle}
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								isBlock: true
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
						var tiddlerNode = {
 | 
				
			||||||
		type: "element",
 | 
							type: "element",
 | 
				
			||||||
		tag: "$transclude",
 | 
							tag: "$tiddler",
 | 
				
			||||||
		attributes: {
 | 
							attributes: {
 | 
				
			||||||
			target: {type: "string", value: targetTitle}
 | 
								title: {type: "string", value: targetTitle}
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		isBlock: true
 | 
							isBlock: true,
 | 
				
			||||||
 | 
							children: [transcludeNode]
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
	if(targetField) {
 | 
						if(targetField) {
 | 
				
			||||||
		node.attributes.field = {type: "string", value: targetField};
 | 
							transcludeNode.attributes.field = {type: "string", value: targetField};
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if(targetIndex) {
 | 
						if(targetIndex) {
 | 
				
			||||||
		node.attributes.index = {type: "string", value: targetIndex};
 | 
							transcludeNode.attributes.index = {type: "string", value: targetIndex};
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if(tooltip) {
 | 
						if(tooltip) {
 | 
				
			||||||
		node.attributes.tooltip = {type: "string", value: tooltip};
 | 
							transcludeNode.attributes.tooltip = {type: "string", value: tooltip};
 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if(template) {
 | 
					 | 
				
			||||||
		node.attributes.template = {type: "string", value: template};
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if(style) {
 | 
						if(style) {
 | 
				
			||||||
		node.attributes.style = {type: "string", value: style};
 | 
							transcludeNode.attributes.style = {type: "string", value: style};
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if(classes) {
 | 
						if(classes) {
 | 
				
			||||||
		node.attributes["class"] = {type: "string", value: classes.split(".").join(" ")};
 | 
							transcludeNode.attributes["class"] = {type: "string", value: classes.split(".").join(" ")};
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return [node];
 | 
						return [tiddlerNode];
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
})();
 | 
					})();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -42,33 +42,38 @@ exports.parse = function() {
 | 
				
			|||||||
		template = $tw.utils.trim(this.match[3]),
 | 
							template = $tw.utils.trim(this.match[3]),
 | 
				
			||||||
		style = this.match[4],
 | 
							style = this.match[4],
 | 
				
			||||||
		classes = this.match[5];
 | 
							classes = this.match[5];
 | 
				
			||||||
	// Return the transclude widget
 | 
						// Prepare the transclude widget
 | 
				
			||||||
	var node = {
 | 
						var transcludeNode = {
 | 
				
			||||||
 | 
								type: "element",
 | 
				
			||||||
 | 
								tag: "$transclude",
 | 
				
			||||||
 | 
								attributes: {
 | 
				
			||||||
 | 
									title: {type: "string", value: template || targetTitle}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
						var tiddlerNode = {
 | 
				
			||||||
		type: "element",
 | 
							type: "element",
 | 
				
			||||||
		tag: "$transclude",
 | 
							tag: "$tiddler",
 | 
				
			||||||
		attributes: {
 | 
							attributes: {
 | 
				
			||||||
			target: {type: "string", value: targetTitle}
 | 
								title: {type: "string", value: targetTitle}
 | 
				
			||||||
		}
 | 
							},
 | 
				
			||||||
 | 
							children: [transcludeNode]
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
	if(targetField) {
 | 
						if(targetField) {
 | 
				
			||||||
		node.attributes.field = {type: "string", value: targetField};
 | 
							transcludeNode.attributes.field = {type: "string", value: targetField};
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if(targetIndex) {
 | 
						if(targetIndex) {
 | 
				
			||||||
		node.attributes.index = {type: "string", value: targetIndex};
 | 
							transcludeNode.attributes.index = {type: "string", value: targetIndex};
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if(tooltip) {
 | 
						if(tooltip) {
 | 
				
			||||||
		node.attributes.tooltip = {type: "string", value: tooltip};
 | 
							transcludeNode.attributes.tooltip = {type: "string", value: tooltip};
 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if(template) {
 | 
					 | 
				
			||||||
		node.attributes.template = {type: "string", value: template};
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if(style) {
 | 
						if(style) {
 | 
				
			||||||
		node.attributes.style = {type: "string", value: style};
 | 
							transcludeNode.attributes.style = {type: "string", value: style};
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if(classes) {
 | 
						if(classes) {
 | 
				
			||||||
		node.attributes["class"] = {type: "string", value: classes.split(".").join(" ")};
 | 
							transcludeNode.attributes["class"] = {type: "string", value: classes.split(".").join(" ")};
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return [node];
 | 
						return [tiddlerNode];
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
})();
 | 
					})();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -61,7 +61,7 @@ GridWidget.prototype.generateTable = function() {
 | 
				
			|||||||
						type: "element",
 | 
											type: "element",
 | 
				
			||||||
						tag: "$transclude",
 | 
											tag: "$transclude",
 | 
				
			||||||
						attributes: {
 | 
											attributes: {
 | 
				
			||||||
							target: {type: "string", value: this.getTableCellTitle(col,row)}
 | 
												title: {type: "string", value: this.getTableCellTitle(col,row)}
 | 
				
			||||||
						}
 | 
											}
 | 
				
			||||||
					}]
 | 
										}]
 | 
				
			||||||
				};
 | 
									};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -41,7 +41,7 @@ InfoWidget.types.currentfielddescription = function(options) {
 | 
				
			|||||||
		tag: "$transclude",
 | 
							tag: "$transclude",
 | 
				
			||||||
		isBlock: false,
 | 
							isBlock: false,
 | 
				
			||||||
		attributes: {
 | 
							attributes: {
 | 
				
			||||||
			target: {type: "string", value: descriptionTitle}
 | 
								title: {type: "string", value: descriptionTitle}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}];
 | 
						}];
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@@ -71,7 +71,7 @@ InfoWidget.types.modules = function(options) {
 | 
				
			|||||||
			tag: "$transclude",
 | 
								tag: "$transclude",
 | 
				
			||||||
			isBlock: false,
 | 
								isBlock: false,
 | 
				
			||||||
			attributes: {
 | 
								attributes: {
 | 
				
			||||||
				target: {type: "string", value: MODULE_TYPE_DESCRIPTION_PREFIX + moduleType}
 | 
									title: {type: "string", value: MODULE_TYPE_DESCRIPTION_PREFIX + moduleType}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
		// List each module
 | 
							// List each module
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -197,23 +197,37 @@ ListWidget.prototype.createListElementTransclusion = function(title) {
 | 
				
			|||||||
			}];
 | 
								}];
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	// Create the transclude widget
 | 
						// Create the element widgets
 | 
				
			||||||
	var widget = {
 | 
						if(this.renderer.hasAttribute("hackTemplate")) {
 | 
				
			||||||
		type: "element",
 | 
							return {
 | 
				
			||||||
		tag: "$transclude",
 | 
								type: "element",
 | 
				
			||||||
		isBlock: this.renderer.parseTreeNode.isBlock,
 | 
								tag: "$transclude",
 | 
				
			||||||
		attributes: {},
 | 
								isBlock: this.renderer.parseTreeNode.isBlock,
 | 
				
			||||||
		children: templateTree
 | 
								attributes: {
 | 
				
			||||||
	};
 | 
									title: {type: "string", value: title}
 | 
				
			||||||
	// Set the target if needed
 | 
								}
 | 
				
			||||||
	if(!this.renderer.hasAttribute("hackTemplate")) {
 | 
							};
 | 
				
			||||||
		widget.attributes.target = {type: "string", value: title};
 | 
					 | 
				
			||||||
		widget.attributes.template = {type: "string", value: template};
 | 
					 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		widget.attributes.template = {type: "string", value: title};
 | 
							if(!templateTree) {
 | 
				
			||||||
		widget.children = undefined;
 | 
								templateTree = [{
 | 
				
			||||||
 | 
									type: "element",
 | 
				
			||||||
 | 
									tag: "$transclude",
 | 
				
			||||||
 | 
									attributes: {
 | 
				
			||||||
 | 
										title: {type: "string", value: template}
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									children: templateTree
 | 
				
			||||||
 | 
								}];
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return {
 | 
				
			||||||
 | 
								type: "element",
 | 
				
			||||||
 | 
								tag: "$tiddler",
 | 
				
			||||||
 | 
								isBlock: this.renderer.parseTreeNode.isBlock,
 | 
				
			||||||
 | 
								attributes: {
 | 
				
			||||||
 | 
									title: {type: "string", value: title}
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								children: templateTree
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return widget;
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
@@ -245,10 +259,13 @@ ListWidget.prototype.findListElementByTitle = function(startIndex,title) {
 | 
				
			|||||||
	var testNode = this.macro ? function(node) {
 | 
						var testNode = this.macro ? function(node) {
 | 
				
			||||||
		// We're looking for a macro list element
 | 
							// We're looking for a macro list element
 | 
				
			||||||
		return node.widget.children[0].parseTreeNode.params[0].value === title;
 | 
							return node.widget.children[0].parseTreeNode.params[0].value === title;
 | 
				
			||||||
	} : function(node) {
 | 
						} : (this.renderer.hasAttribute("hackTemplate") ? function(node) {
 | 
				
			||||||
		// We're looking for a transclusion list element
 | 
								// We're looking for a transclusion list element
 | 
				
			||||||
		return node.widget.children[0].attributes.target === title;
 | 
								return node.widget.children[0].attributes.title === title;
 | 
				
			||||||
	};
 | 
							} : function(node) {
 | 
				
			||||||
 | 
								// We're looking for a transclusion list element
 | 
				
			||||||
 | 
								return node.widget.children[0].attributes.title === title;
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
	// Search for the list element
 | 
						// Search for the list element
 | 
				
			||||||
	while(startIndex < this.children.length) {
 | 
						while(startIndex < this.children.length) {
 | 
				
			||||||
		if(testNode(this.children[startIndex])) {
 | 
							if(testNode(this.children[startIndex])) {
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										82
									
								
								core/modules/widgets/tiddler.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								core/modules/widgets/tiddler.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,82 @@
 | 
				
			|||||||
 | 
					/*\
 | 
				
			||||||
 | 
					title: $:/core/modules/widgets/tiddler.js
 | 
				
			||||||
 | 
					type: application/javascript
 | 
				
			||||||
 | 
					module-type: widget
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The tiddler widget sets the current tiddler to a specified title.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Attributes:
 | 
				
			||||||
 | 
						title: the title of the current tiddler
 | 
				
			||||||
 | 
						class: CSS classes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					\*/
 | 
				
			||||||
 | 
					(function(){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*jslint node: true, browser: true */
 | 
				
			||||||
 | 
					/*global $tw: false */
 | 
				
			||||||
 | 
					"use strict";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var TiddlerWidget = function(renderer) {
 | 
				
			||||||
 | 
						// Save state
 | 
				
			||||||
 | 
						this.renderer = renderer;
 | 
				
			||||||
 | 
						// Generate child nodes
 | 
				
			||||||
 | 
						this.generate();
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TiddlerWidget.prototype.generate = function() {
 | 
				
			||||||
 | 
						var self = this;
 | 
				
			||||||
 | 
						this.tiddlerTitle = this.renderer.getAttribute("title","");
 | 
				
			||||||
 | 
						// Set up the attributes for the wrapper element
 | 
				
			||||||
 | 
						var classes = ["tw-tiddler"];
 | 
				
			||||||
 | 
						if(this.renderer.hasAttribute("class")) {
 | 
				
			||||||
 | 
							$tw.utils.pushTop(classes,this.renderer.getAttribute("class").split(" "));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if(!this.renderer.renderTree.wiki.tiddlerExists(this.tiddlerTitle) && !this.renderer.renderTree.wiki.isShadowTiddler(this.tiddlerTitle)) {
 | 
				
			||||||
 | 
							$tw.utils.pushTop(classes,"tw-tiddler-missing");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						// Save the context for this renderer node
 | 
				
			||||||
 | 
						this.renderer.context = {
 | 
				
			||||||
 | 
							tiddlerTitle: this.tiddlerTitle
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
						// Initialise events
 | 
				
			||||||
 | 
						this.events = [];
 | 
				
			||||||
 | 
						// Trap and update tag modification events
 | 
				
			||||||
 | 
						this.events.push({name: "tw-remove-tag", handlerFunction: function(event) {
 | 
				
			||||||
 | 
							event.currentTag = self.tiddlerTitle;
 | 
				
			||||||
 | 
							return true;
 | 
				
			||||||
 | 
						}});
 | 
				
			||||||
 | 
						// Set the element
 | 
				
			||||||
 | 
						this.tag = this.renderer.parseTreeNode.isBlock ? "div" : "span";
 | 
				
			||||||
 | 
						this.attributes = {};
 | 
				
			||||||
 | 
						if(classes.length > 0) {
 | 
				
			||||||
 | 
							this.attributes["class"] = classes.join(" ");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						this.children = this.renderer.renderTree.createRenderers(this.renderer,this.renderer.parseTreeNode.children);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TiddlerWidget.prototype.refreshInDom = function(changedAttributes,changedTiddlers) {
 | 
				
			||||||
 | 
						// Set the class for missing tiddlers
 | 
				
			||||||
 | 
						if(this.tiddlerTitle && changedTiddlers[this.tiddlerTitle]) {
 | 
				
			||||||
 | 
							$tw.utils.toggleClass(this.renderer.domNode,"tw-tiddler-missing",!this.renderer.renderTree.wiki.tiddlerExists(this.tiddlerTitle));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						// Check if any of our attributes have changed, or if a tiddler we're interested in has changed
 | 
				
			||||||
 | 
						if(changedAttributes.title) {
 | 
				
			||||||
 | 
							// Regenerate and rerender the widget and replace the existing DOM node
 | 
				
			||||||
 | 
							this.generate();
 | 
				
			||||||
 | 
							var oldDomNode = this.renderer.domNode,
 | 
				
			||||||
 | 
								newDomNode = this.renderer.renderInDom();
 | 
				
			||||||
 | 
							oldDomNode.parentNode.replaceChild(newDomNode,oldDomNode);
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							// We don't need to refresh ourselves, so just refresh any child nodes
 | 
				
			||||||
 | 
							$tw.utils.each(this.children,function(node) {
 | 
				
			||||||
 | 
								if(node.refreshInDom) {
 | 
				
			||||||
 | 
									node.refreshInDom(changedTiddlers);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					exports.tiddler = TiddlerWidget;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					})();
 | 
				
			||||||
@@ -6,38 +6,7 @@ module-type: widget
 | 
				
			|||||||
The transclude widget includes another tiddler into the tiddler being rendered.
 | 
					The transclude widget includes another tiddler into the tiddler being rendered.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Attributes:
 | 
					Attributes:
 | 
				
			||||||
	target: the title of the tiddler to transclude
 | 
						title: the title of the tiddler to transclude
 | 
				
			||||||
	template: the title of the tiddler to use as a template for the transcluded tiddler
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
The simplest case is to just supply a target tiddler:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
{{{
 | 
					 | 
				
			||||||
<$transclude target="Foo"/>
 | 
					 | 
				
			||||||
}}}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
This will render the tiddler Foo within the current tiddler. If the tiddler Foo includes
 | 
					 | 
				
			||||||
the view widget (or other widget that reference the fields of the current tiddler), then the
 | 
					 | 
				
			||||||
fields of the tiddler Foo will be accessed.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
If you want to transclude the tiddler as a template, so that the fields referenced by the view
 | 
					 | 
				
			||||||
widget are those of the tiddler doing the transcluding, then you can instead specify the tiddler
 | 
					 | 
				
			||||||
as a template:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
{{{
 | 
					 | 
				
			||||||
<$transclude template="Foo"/>
 | 
					 | 
				
			||||||
}}}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
The effect is the same as the previous example: the text of the tiddler Foo is rendered. The
 | 
					 | 
				
			||||||
difference is that the view widget will access the fields of the tiddler doing the transcluding.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
The `target` and `template` attributes may be combined:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
{{{
 | 
					 | 
				
			||||||
<$transclude template="Bar" target="Foo"/>
 | 
					 | 
				
			||||||
}}}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Here, the text of the tiddler `Bar` will be transcluded, with the widgets within it accessing the fields
 | 
					 | 
				
			||||||
of the tiddler `Foo`.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
\*/
 | 
					\*/
 | 
				
			||||||
(function(){
 | 
					(function(){
 | 
				
			||||||
@@ -55,65 +24,49 @@ var TranscludeWidget = function(renderer) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
TranscludeWidget.prototype.generate = function() {
 | 
					TranscludeWidget.prototype.generate = function() {
 | 
				
			||||||
	var self = this,
 | 
						var self = this,
 | 
				
			||||||
		tr, templateParseTree, templateTiddler;
 | 
							templateParseTree;
 | 
				
			||||||
	// Get the render target details
 | 
						// Get the render target details
 | 
				
			||||||
	this.targetTitle = this.renderer.getAttribute("target",this.renderer.tiddlerTitle);
 | 
						this.transcludeTitle = this.renderer.getAttribute("title",this.renderer.tiddlerTitle);
 | 
				
			||||||
	this.targetField = this.renderer.getAttribute("field");
 | 
						this.transcludeField = this.renderer.getAttribute("field");
 | 
				
			||||||
	this.targetIndex = this.renderer.getAttribute("index");
 | 
						this.transcludeIndex = this.renderer.getAttribute("index");
 | 
				
			||||||
	// Get the render tree for the template
 | 
						// Check for recursion
 | 
				
			||||||
	this.templateTitle = undefined;
 | 
						if(this.renderer.renderTree.checkContextRecursion(this.renderer.parentRenderer,{
 | 
				
			||||||
	if(this.renderer.parseTreeNode.children && this.renderer.parseTreeNode.children.length > 0) {
 | 
								transcludeTitle: this.transcludeTitle,
 | 
				
			||||||
		// Use the child nodes as the template if we've got them
 | 
								transcludeField: this.transcludeField,
 | 
				
			||||||
		templateParseTree = this.renderer.parseTreeNode.children;
 | 
								transcludeIndex: this.transcludeIndex
 | 
				
			||||||
 | 
							})) {
 | 
				
			||||||
 | 
							templateParseTree = [{type: "text", text: "Tiddler recursion error in transclude widget"}];	
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		this.templateTitle = this.renderer.getAttribute("template",this.targetTitle);
 | 
							var parser;
 | 
				
			||||||
		// Check for recursion
 | 
							if(this.transcludeField === "text" || (!this.transcludeField && !this.transcludeIndex)) {
 | 
				
			||||||
		if(this.renderer.renderTree.checkContextRecursion(this.renderer.parentRenderer,{
 | 
								parser = this.renderer.renderTree.wiki.parseTiddler(this.transcludeTitle,{parseAsInline: !this.renderer.parseTreeNode.isBlock});
 | 
				
			||||||
				tiddlerTitle: this.targetTitle,
 | 
					 | 
				
			||||||
				templateTitle: this.templateTitle
 | 
					 | 
				
			||||||
			})) {
 | 
					 | 
				
			||||||
			templateParseTree = [{type: "text", text: "Tiddler recursion error in transclude widget"}];	
 | 
					 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			var parser;
 | 
								var tiddler,text;
 | 
				
			||||||
			if(this.targetField === "text" || (!this.targetField && !this.targetIndex)) {
 | 
								if(this.transcludeField) {
 | 
				
			||||||
				parser = this.renderer.renderTree.wiki.parseTiddler(this.templateTitle,{parseAsInline: !this.renderer.parseTreeNode.isBlock});
 | 
									tiddler = this.renderer.renderTree.wiki.getTiddler(this.transcludeTitle);
 | 
				
			||||||
			} else {
 | 
									text = tiddler ? tiddler.fields[this.transcludeField] : "";
 | 
				
			||||||
				var tiddler,text;
 | 
									if(text === undefined) {
 | 
				
			||||||
				if(this.targetField) {
 | 
										text = "";
 | 
				
			||||||
					tiddler = this.renderer.renderTree.wiki.getTiddler(this.targetTitle);
 | 
					 | 
				
			||||||
					text = tiddler ? tiddler.fields[this.targetField] : "";
 | 
					 | 
				
			||||||
					if(text === undefined) {
 | 
					 | 
				
			||||||
						text = "";
 | 
					 | 
				
			||||||
					}
 | 
					 | 
				
			||||||
					parser = this.renderer.renderTree.wiki.parseText("text/vnd.tiddlywiki",text,{parseAsInline: !this.renderer.parseTreeNode.isBlock});
 | 
					 | 
				
			||||||
				} else if(this.targetIndex) {
 | 
					 | 
				
			||||||
					text = this.renderer.renderTree.wiki.extractTiddlerDataItem(this.targetTitle,this.targetIndex,"");
 | 
					 | 
				
			||||||
					parser = this.renderer.renderTree.wiki.parseText("text/vnd.tiddlywiki",text,{parseAsInline: !this.renderer.parseTreeNode.isBlock});
 | 
					 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
									parser = this.renderer.renderTree.wiki.parseText("text/vnd.tiddlywiki",text,{parseAsInline: !this.renderer.parseTreeNode.isBlock});
 | 
				
			||||||
 | 
								} else if(this.transcludeIndex) {
 | 
				
			||||||
 | 
									text = this.renderer.renderTree.wiki.extractTiddlerDataItem(this.transcludeTitle,this.transcludeIndex,"");
 | 
				
			||||||
 | 
									parser = this.renderer.renderTree.wiki.parseText("text/vnd.tiddlywiki",text,{parseAsInline: !this.renderer.parseTreeNode.isBlock});
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			templateParseTree = parser ? parser.tree : [];
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							templateParseTree = parser ? parser.tree : [];
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	// Set up the attributes for the wrapper element
 | 
						// Set up the attributes for the wrapper element
 | 
				
			||||||
	var classes = ["tw-transclude"];
 | 
						var classes = ["tw-transclude"];
 | 
				
			||||||
	if(this.renderer.hasAttribute("class")) {
 | 
						if(this.renderer.hasAttribute("class")) {
 | 
				
			||||||
		$tw.utils.pushTop(classes,this.renderer.getAttribute("class").split(" "));
 | 
							$tw.utils.pushTop(classes,this.renderer.getAttribute("class").split(" "));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if(!this.renderer.renderTree.wiki.tiddlerExists(this.targetTitle) && !this.renderer.renderTree.wiki.isShadowTiddler(this.targetTitle)) {
 | 
					 | 
				
			||||||
		$tw.utils.pushTop(classes,"tw-tiddler-missing");
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	// Save the context for this renderer node
 | 
						// Save the context for this renderer node
 | 
				
			||||||
	this.renderer.context = {
 | 
						this.renderer.context = {
 | 
				
			||||||
		tiddlerTitle: this.targetTitle,
 | 
							transcludeTitle: this.transcludeTitle,
 | 
				
			||||||
		templateTitle: this.templateTitle
 | 
							transcludeField: this.transcludeField,
 | 
				
			||||||
 | 
							transcludeIndex: this.transcludeIndex
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
	// Initialise events
 | 
					 | 
				
			||||||
	this.events = [];
 | 
					 | 
				
			||||||
	// Trap and update tag modification events
 | 
					 | 
				
			||||||
	this.events.push({name: "tw-remove-tag", handlerFunction: function(event) {
 | 
					 | 
				
			||||||
		event.currentTag = self.targetTitle;
 | 
					 | 
				
			||||||
		return true;
 | 
					 | 
				
			||||||
	}});
 | 
					 | 
				
			||||||
	// Set the element
 | 
						// Set the element
 | 
				
			||||||
	this.tag = this.renderer.parseTreeNode.isBlock ? "div" : "span";
 | 
						this.tag = this.renderer.parseTreeNode.isBlock ? "div" : "span";
 | 
				
			||||||
	this.attributes = {};
 | 
						this.attributes = {};
 | 
				
			||||||
@@ -130,12 +83,8 @@ TranscludeWidget.prototype.generate = function() {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TranscludeWidget.prototype.refreshInDom = function(changedAttributes,changedTiddlers) {
 | 
					TranscludeWidget.prototype.refreshInDom = function(changedAttributes,changedTiddlers) {
 | 
				
			||||||
	// Set the class for missing tiddlers
 | 
					 | 
				
			||||||
	if(this.targetTitle && changedTiddlers[this.targetTitle]) {
 | 
					 | 
				
			||||||
		$tw.utils.toggleClass(this.renderer.domNode,"tw-tiddler-missing",!this.renderer.renderTree.wiki.tiddlerExists(this.targetTitle));
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	// Check if any of our attributes have changed, or if a tiddler we're interested in has changed
 | 
						// Check if any of our attributes have changed, or if a tiddler we're interested in has changed
 | 
				
			||||||
	if(changedAttributes.target || changedAttributes.template || (this.templateTitle && changedTiddlers[this.templateTitle])) {
 | 
						if(changedAttributes.transcludeField || changedAttributes.transcludeIndex || (this.transcludeTitle && changedTiddlers[this.transcludeTitle])) {
 | 
				
			||||||
		// Regenerate and rerender the widget and replace the existing DOM node
 | 
							// Regenerate and rerender the widget and replace the existing DOM node
 | 
				
			||||||
		this.generate();
 | 
							this.generate();
 | 
				
			||||||
		var oldDomNode = this.renderer.domNode,
 | 
							var oldDomNode = this.renderer.domNode,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,10 +9,10 @@ modifier: JeremyRuston
 | 
				
			|||||||
<$edit field="draft.title"/>
 | 
					<$edit field="draft.title"/>
 | 
				
			||||||
@@
 | 
					@@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<$transclude template="$:/core/ui/TagsEditor"/>
 | 
					<$transclude title="$:/core/ui/TagsEditor"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<$reveal state="$:/ShowEditPreview" type="match" text="yes">
 | 
					<$reveal state="$:/ShowEditPreview" type="match" text="yes">
 | 
				
			||||||
<$transclude template="$:/core/ui/EditorHint"/> <$button type="set" set="$:/ShowEditPreview" setTo="no">hide preview</$button>
 | 
					<$transclude title="$:/core/ui/EditorHint"/> <$button type="set" set="$:/ShowEditPreview" setTo="no">hide preview</$button>
 | 
				
			||||||
<div class="tw-tiddler-preview">
 | 
					<div class="tw-tiddler-preview">
 | 
				
			||||||
<div class="tw-tiddler-preview-preview">
 | 
					<div class="tw-tiddler-preview-preview">
 | 
				
			||||||
<$view field="text" format="wikified"/>
 | 
					<$view field="text" format="wikified"/>
 | 
				
			||||||
@@ -23,8 +23,8 @@ modifier: JeremyRuston
 | 
				
			|||||||
</div>
 | 
					</div>
 | 
				
			||||||
</$reveal>
 | 
					</$reveal>
 | 
				
			||||||
<$reveal state="$:/ShowEditPreview" type="nomatch" text="yes">
 | 
					<$reveal state="$:/ShowEditPreview" type="nomatch" text="yes">
 | 
				
			||||||
<$transclude template="$:/core/ui/EditorHint"/> <$button type="set" set="$:/ShowEditPreview" setTo="yes">show preview</$button>
 | 
					<$transclude title="$:/core/ui/EditorHint"/> <$button type="set" set="$:/ShowEditPreview" setTo="yes">show preview</$button>
 | 
				
			||||||
<$edit field="text"/>
 | 
					<$edit field="text"/>
 | 
				
			||||||
</$reveal>
 | 
					</$reveal>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<$transclude template="$:/core/ui/FieldEditor"/>
 | 
					<$transclude title="$:/core/ui/FieldEditor"/>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,7 +29,7 @@ title: $:/core/ui/MoreSideBar
 | 
				
			|||||||
</$reveal>
 | 
					</$reveal>
 | 
				
			||||||
<$reveal type="match" state="$:/state/moreSideBarTabSet" text="tagsTab" qualifyTiddlerTitles="yes">
 | 
					<$reveal type="match" state="$:/state/moreSideBarTabSet" text="tagsTab" qualifyTiddlerTitles="yes">
 | 
				
			||||||
<$list filter="[tags[]sort[title]]" itemClass="tw-menu-list-item">
 | 
					<$list filter="[tags[]sort[title]]" itemClass="tw-menu-list-item">
 | 
				
			||||||
<$transclude template="$:/core/ui/TagTemplate"/> <small class="tw-menu-list-count"><$count filter="[is[current]tagging[]]"/></small>
 | 
					<$transclude title="$:/core/ui/TagTemplate"/> <small class="tw-menu-list-count"><$count filter="[is[current]tagging[]]"/></small>
 | 
				
			||||||
</$list>
 | 
					</$list>
 | 
				
			||||||
</$reveal>
 | 
					</$reveal>
 | 
				
			||||||
<$reveal type="match" state="$:/state/moreSideBarTabSet" text="missingTab" qualifyTiddlerTitles="yes">
 | 
					<$reveal type="match" state="$:/state/moreSideBarTabSet" text="missingTab" qualifyTiddlerTitles="yes">
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
title: $:/core/ui/TagTemplate
 | 
					title: $:/core/ui/TagTemplate
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<$button popup="$:/state/tagpopup" qualifyTiddlerTitles="yes" class="btn-invisible"><$setstyle name="background-color" value={{!!color}} class="tw-tag-label"><$transclude target={{!!icon}}/> <$view field="title" format="text" /></$setstyle></$button>
 | 
					<$button popup="$:/state/tagpopup" qualifyTiddlerTitles="yes" class="btn-invisible"><$setstyle name="background-color" value={{!!color}} class="tw-tag-label"><$transclude title={{!!icon}}/> <$view field="title" format="text" /></$setstyle></$button>
 | 
				
			||||||
<$reveal state="$:/state/tagpopup" type="popup" position="below" qualifyTiddlerTitles="yes" ><div class="tw-drop-down">
 | 
					<$reveal state="$:/state/tagpopup" type="popup" position="below" qualifyTiddlerTitles="yes" ><div class="tw-drop-down">
 | 
				
			||||||
<$view field="title" format="link" />
 | 
					<$view field="title" format="link" />
 | 
				
			||||||
----
 | 
					----
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,7 +18,7 @@ title: $:/core/ui/TiddlerInfo
 | 
				
			|||||||
<$list filter="[is[current]listed[]!is[system]]" itemClass="tw-menu-list-item" emptyMessage="This tiddler is not listed by any others"/>
 | 
					<$list filter="[is[current]listed[]!is[system]]" itemClass="tw-menu-list-item" emptyMessage="This tiddler is not listed by any others"/>
 | 
				
			||||||
</$reveal>
 | 
					</$reveal>
 | 
				
			||||||
<$reveal type="match" state="$:/state/tiddlerDropDownTabSet" text="fieldsTab" qualifyTiddlerTitles="yes">
 | 
					<$reveal type="match" state="$:/state/tiddlerDropDownTabSet" text="fieldsTab" qualifyTiddlerTitles="yes">
 | 
				
			||||||
<$transclude template="$:/core/ui/TiddlerFields"/>
 | 
					<$transclude title="$:/core/ui/TiddlerFields"/>
 | 
				
			||||||
</$reveal>
 | 
					</$reveal>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
@@ -3,10 +3,10 @@ tags: $:/tags/ViewTemplate
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
<div class="tw-tiddler-title"><div class="title"><$setstyle name="fill" value={{!!color}}><span class="tw-tiddler-controls"><$button popup="$:/state/tiddlerInfo" qualifyTiddlerTitles="yes" class="btn-invisible">{{$:/core/images/info-button}}</$button><$button message="tw-edit-tiddler" class="btn-invisible">{{$:/core/images/edit-button}}</$button><$button message="tw-close-tiddler" class="btn-invisible">{{$:/core/images/close-button}}</$button>
 | 
					<div class="tw-tiddler-title"><div class="title"><$setstyle name="fill" value={{!!color}}><span class="tw-tiddler-controls"><$button popup="$:/state/tiddlerInfo" qualifyTiddlerTitles="yes" class="btn-invisible">{{$:/core/images/info-button}}</$button><$button message="tw-edit-tiddler" class="btn-invisible">{{$:/core/images/edit-button}}</$button><$button message="tw-close-tiddler" class="btn-invisible">{{$:/core/images/close-button}}</$button>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
</span><$transclude target={{!!icon}}/> <$view field="title"/></$setstyle></div>
 | 
					</span><$transclude title={{!!icon}}/> <$view field="title"/></$setstyle></div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<$reveal type="nomatch" text="" default="" state="$:/state/tiddlerInfo" qualifyTiddlerTitles="yes" class="tw-tiddler-info" animate="yes">
 | 
					<$reveal type="nomatch" text="" default="" state="$:/state/tiddlerInfo" qualifyTiddlerTitles="yes" class="tw-tiddler-info" animate="yes">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<$transclude template="$:/core/ui/TiddlerInfo"/>
 | 
					<$transclude title="$:/core/ui/TiddlerInfo"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
</$reveal></div>
 | 
					</$reveal></div>
 | 
				
			||||||
@@ -1,3 +1,3 @@
 | 
				
			|||||||
title: $:/state/moreSideBarTabSet-tiddlerTitle:$:/core/ui/MoreSideBar;templateTitle:$:/core/ui/MoreSideBar;-tiddlerTitle:$:/core/ui/SideBar;templateTitle:$:/core/ui/SideBar;-tiddlerTitle:$:/core/ui/PageTemplate;-
 | 
					title: $:/state/moreSideBarTabSet--tiddlerTitle:$:/core/ui/MoreSideBar;--tiddlerTitle:$:/core/ui/SideBar;-tiddlerTitle:$:/core/ui/PageTemplate;-
 | 
				
			||||||
 | 
					
 | 
				
			||||||
tagsTab
 | 
					tagsTab
 | 
				
			||||||
@@ -1,3 +1,3 @@
 | 
				
			|||||||
title: $:/state/sideBarTabSet-tiddlerTitle:$:/core/ui/SideBar;templateTitle:$:/core/ui/SideBar;-tiddlerTitle:$:/core/ui/PageTemplate;-
 | 
					title: $:/state/sideBarTabSet--tiddlerTitle:$:/core/ui/SideBar;-tiddlerTitle:$:/core/ui/PageTemplate;-
 | 
				
			||||||
 | 
					
 | 
				
			||||||
openTab
 | 
					openTab
 | 
				
			||||||
@@ -1,6 +1,9 @@
 | 
				
			|||||||
title: Docs
 | 
					created: 201308241418
 | 
				
			||||||
modified: 201308201324
 | 
					creator: JeremyRuston
 | 
				
			||||||
 | 
					modified: 201308241531
 | 
				
			||||||
 | 
					modifier: JeremyRuston
 | 
				
			||||||
tags: docs introduction
 | 
					tags: docs introduction
 | 
				
			||||||
 | 
					title: Docs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This is the main documentation hub for TiddlyWiki. See also the DeveloperDocs.
 | 
					This is the main documentation hub for TiddlyWiki. See also the DeveloperDocs.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -38,19 +41,19 @@ The machinery tying those concepts together includes:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
These are the individual rules that make up WikiText:
 | 
					These are the individual rules that make up WikiText:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{{{ [tag[wikitextrule]sort[title]] }}}
 | 
					<$list filter="[tag[wikitextrule]sort[title]]" type="ul"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
! Widgets
 | 
					! Widgets
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Widgets give WikiText dynamic functionality:
 | 
					Widgets give WikiText dynamic functionality:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{{{ [tag[widget]sort[title]] }}}
 | 
					<$list filter="[tag[widget]sort[title]]" type="ul"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
! Commands
 | 
					! Commands
 | 
				
			||||||
 | 
					
 | 
				
			||||||
When run under node.js, TiddlyWiki supports a [[command line interface|TiddlyWiki5 Node Edition]] with the following built-in commands:
 | 
					{{command}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{{{ [tag[command]sort[title]] }}}
 | 
					<$list filter="[tag[command]sort[title]]" type="ul"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
! Miscellaneous
 | 
					! Miscellaneous
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,8 @@
 | 
				
			|||||||
color: #8bbec7
 | 
					color: #8bbec7
 | 
				
			||||||
modified: 201306131057
 | 
					created: 201308241531
 | 
				
			||||||
 | 
					creator: JeremyRuston
 | 
				
			||||||
 | 
					modified: 201308241531
 | 
				
			||||||
 | 
					modifier: JeremyRuston
 | 
				
			||||||
title: command
 | 
					title: command
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					When run under node.js, TiddlyWiki supports a [[command line interface|TiddlyWiki5 Node Edition]] with these built-in commands.
 | 
				
			||||||
@@ -1,6 +1,9 @@
 | 
				
			|||||||
 | 
					created: 201308241419
 | 
				
			||||||
 | 
					creator: JeremyRuston
 | 
				
			||||||
 | 
					modified: 201308241419
 | 
				
			||||||
 | 
					modifier: JeremyRuston
 | 
				
			||||||
 | 
					tags: widget docs
 | 
				
			||||||
title: ListWidget
 | 
					title: ListWidget
 | 
				
			||||||
modified: 201308201324
 | 
					 | 
				
			||||||
tags: widget
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
\define demoMacro(title)
 | 
					\define demoMacro(title)
 | 
				
			||||||
This is the tiddler called [[Blah-$title$]]
 | 
					This is the tiddler called [[Blah-$title$]]
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										16
									
								
								editions/tw5.com/tiddlers/widgets/TiddlerWidget.tid
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								editions/tw5.com/tiddlers/widgets/TiddlerWidget.tid
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
				
			|||||||
 | 
					created: 201308241543
 | 
				
			||||||
 | 
					creator: JeremyRuston
 | 
				
			||||||
 | 
					modified: 201308241543
 | 
				
			||||||
 | 
					modifier: JeremyRuston
 | 
				
			||||||
 | 
					tags: docs widget
 | 
				
			||||||
 | 
					title: TiddlerWidget
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					! Introduction
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The TiddlerWidget sets the ContextTiddler that applies for processing its content.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					! Content and Attributes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|!Attribute |!Description |
 | 
				
			||||||
 | 
					|title |The title of the tiddler to become the new ContextTiddler |
 | 
				
			||||||
 | 
					|class |CSS classes to added to the generated elements |
 | 
				
			||||||
							
								
								
									
										23
									
								
								editions/tw5.com/tiddlers/widgets/TranscludeWidget.tid
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								editions/tw5.com/tiddlers/widgets/TranscludeWidget.tid
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					created: 201308241425
 | 
				
			||||||
 | 
					creator: JeremyRuston
 | 
				
			||||||
 | 
					modified: 201308241530
 | 
				
			||||||
 | 
					modifier: JeremyRuston
 | 
				
			||||||
 | 
					tags: widget docs
 | 
				
			||||||
 | 
					title: TranscludeWidget
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					! Introduction
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The TranscludeWidget dynamically imports content from another tiddler.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					! Attributes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|!Attribute |!Description |
 | 
				
			||||||
 | 
					|title |The title of the tiddler to transclude (defaults to the current tiddler) |
 | 
				
			||||||
 | 
					|field |The field name of the current tiddler (defaults to "text"; if present takes precedence over the index attribute) |
 | 
				
			||||||
 | 
					|index |The index of a property in a [[DataTiddler|DataTiddlers]] |
 | 
				
			||||||
 | 
					|class |CSS classes to added to the generated elements |
 | 
				
			||||||
 | 
					|style |CSS styles to be added to the generated elements |
 | 
				
			||||||
 | 
					|tooltip |Tooltip to be added to the generated elements |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The TranscludeWidget ignores any contained content.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Reference in New Issue
	
	Block a user