mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2024-11-23 18:17:20 +00:00
Extend transclude widget to optionally set variables
Partially fixes #5199
This commit is contained in:
parent
427eb6d085
commit
80ee5adb14
@ -75,8 +75,17 @@ TranscludeWidget.prototype.execute = function() {
|
|||||||
]}];
|
]}];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Assign any variables set via attributes starting with $
|
||||||
|
var variables = Object.create(null);
|
||||||
|
$tw.utils.each(this.attributes,function(attribute,name) {
|
||||||
|
if(name.charAt(0) === "$") {
|
||||||
|
variables[name.substr(1)] = attribute;
|
||||||
|
}
|
||||||
|
});
|
||||||
// Construct the child widgets
|
// Construct the child widgets
|
||||||
this.makeChildWidgets(parseTreeNodes);
|
this.makeChildWidgets(parseTreeNodes,{
|
||||||
|
variables: variables
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -333,9 +333,22 @@ Widget.prototype.assignAttributes = function(domNode,options) {
|
|||||||
/*
|
/*
|
||||||
Make child widgets correspondng to specified parseTreeNodes
|
Make child widgets correspondng to specified parseTreeNodes
|
||||||
*/
|
*/
|
||||||
Widget.prototype.makeChildWidgets = function(parseTreeNodes) {
|
Widget.prototype.makeChildWidgets = function(parseTreeNodes,options) {
|
||||||
|
options = options || {};
|
||||||
this.children = [];
|
this.children = [];
|
||||||
var self = this;
|
var self = this;
|
||||||
|
// Create set variable widgets for each variable
|
||||||
|
$tw.utils.each(options.variables,function(value,name) {
|
||||||
|
var setVariableWidget = {
|
||||||
|
type: "set",
|
||||||
|
attributes: {
|
||||||
|
name: {type: "string", value: name},
|
||||||
|
value: {type: "string", value: value}
|
||||||
|
},
|
||||||
|
children: parseTreeNodes
|
||||||
|
};
|
||||||
|
parseTreeNodes = [setVariableWidget];
|
||||||
|
});
|
||||||
$tw.utils.each(parseTreeNodes || (this.parseTreeNode && this.parseTreeNode.children),function(childNode) {
|
$tw.utils.each(parseTreeNodes || (this.parseTreeNode && this.parseTreeNode.children),function(childNode) {
|
||||||
self.children.push(self.makeChildWidget(childNode));
|
self.children.push(self.makeChildWidget(childNode));
|
||||||
});
|
});
|
||||||
@ -343,16 +356,32 @@ Widget.prototype.makeChildWidgets = function(parseTreeNodes) {
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
Construct the widget object for a parse tree node
|
Construct the widget object for a parse tree node
|
||||||
|
options include:
|
||||||
|
variables: optional hashmap of variables to wrap around the widget
|
||||||
*/
|
*/
|
||||||
Widget.prototype.makeChildWidget = function(parseTreeNode) {
|
Widget.prototype.makeChildWidget = function(parseTreeNode,options) {
|
||||||
|
options = options || {};
|
||||||
var WidgetClass = this.widgetClasses[parseTreeNode.type];
|
var WidgetClass = this.widgetClasses[parseTreeNode.type];
|
||||||
if(!WidgetClass) {
|
if(!WidgetClass) {
|
||||||
WidgetClass = this.widgetClasses.text;
|
WidgetClass = this.widgetClasses.text;
|
||||||
parseTreeNode = {type: "text", text: "Undefined widget '" + parseTreeNode.type + "'"};
|
parseTreeNode = {type: "text", text: "Undefined widget '" + parseTreeNode.type + "'"};
|
||||||
}
|
}
|
||||||
|
// Create set variable widgets for each variable
|
||||||
|
$tw.utils.each(options.variables,function(value,name) {
|
||||||
|
var setVariableWidget = {
|
||||||
|
type: "set",
|
||||||
|
attributes: {
|
||||||
|
name: {type: "string", value: name},
|
||||||
|
value: {type: "string", value: value}
|
||||||
|
},
|
||||||
|
children: [
|
||||||
|
parseTreeNode
|
||||||
|
]
|
||||||
|
};
|
||||||
|
parseTreeNode = setVariableWidget;
|
||||||
|
});
|
||||||
return new WidgetClass(parseTreeNode,{
|
return new WidgetClass(parseTreeNode,{
|
||||||
wiki: this.wiki,
|
wiki: this.wiki,
|
||||||
variables: {},
|
|
||||||
parentWidget: this,
|
parentWidget: this,
|
||||||
document: this.document
|
document: this.document
|
||||||
});
|
});
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
created: 20130824142500000
|
created: 20130824142500000
|
||||||
modified: 20140717175900970
|
modified: 20210319150601867
|
||||||
tags: Widgets
|
tags: Widgets
|
||||||
title: TranscludeWidget
|
title: TranscludeWidget
|
||||||
type: text/vnd.tiddlywiki
|
type: text/vnd.tiddlywiki
|
||||||
@ -17,6 +17,7 @@ The TranscludeWidget dynamically imports content from another tiddler.
|
|||||||
|index |The index of a property in a [[DataTiddler|DataTiddlers]] |
|
|index |The index of a property in a [[DataTiddler|DataTiddlers]] |
|
||||||
|subtiddler |Optional SubTiddler title when the target tiddler is a [[plugin|Plugins]] (see below) |
|
|subtiddler |Optional SubTiddler title when the target tiddler is a [[plugin|Plugins]] (see below) |
|
||||||
|mode |Override the default parsing mode for the transcluded text to "block" or "inline" |
|
|mode |Override the default parsing mode for the transcluded text to "block" or "inline" |
|
||||||
|
|//(attributes starting with $)// |<<.from-version "5.1.24">> The $ is removed from each attribute name to specify a variable name that is assigned the specified value for the scope of the transclusion |
|
||||||
|
|
||||||
The TranscludeWidget treats any contained content as a fallback if the target of the transclusion is not defined (ie a missing tiddler or a missing field).
|
The TranscludeWidget treats any contained content as a fallback if the target of the transclusion is not defined (ie a missing tiddler or a missing field).
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user