1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2026-01-26 12:53:42 +00:00

Compare commits

..

1 Commits

Author SHA1 Message Date
Jeremy Ruston
f979da941a Initial Commit 2024-01-16 16:09:36 +00:00
39 changed files with 107 additions and 526 deletions

View File

@@ -4,7 +4,6 @@ _canonical_uri: The full URI of an external image tiddler
author: Name of the author of a plugin
bag: The name of the bag from which a tiddler came
caption: The text to be displayed on a tab or button
class: The CSS class applied to a tiddler when rendering it - see [[Custom styles by user-class]]. Also used for [[Modals]]
code-body: The view template will display the tiddler as code if set to ''yes''
color: The CSS color value associated with a tiddler
component: The name of the component responsible for an [[alert tiddler|AlertMechanism]]

View File

@@ -49,11 +49,11 @@ exports.parse = function() {
if(this.match[3]) {
params = $tw.utils.parseParameterDefinition(this.match[4]);
}
// Is the remainder of the line blank after the parameter close paren?
// Is this a multiline definition?
var reEnd;
if(this.match[5]) {
// If so, it is a multiline definition and the end of the body is marked with \end
reEnd = new RegExp("((:?^|\\r?\\n)[^\\S\\n\\r]*\\\\end[^\\S\\n\\r]*(?:" + $tw.utils.escapeRegExp(this.match[2]) + ")?(?:$|\\r?\\n))","mg");
// If so, the end of the body is marked with \end
reEnd = new RegExp("(\\r?\\n[^\\S\\n\\r]*\\\\end[^\\S\\n\\r]*(?:" + $tw.utils.escapeRegExp(this.match[2]) + ")?(?:$|\\r?\\n))","mg");
} else {
// Otherwise, the end of the definition is marked by the end of the line
reEnd = /($|\r?\n)/mg;

View File

@@ -54,11 +54,11 @@ exports.parse = function() {
paramMatch = reParam.exec(paramString);
}
}
// Is the remainder of the \define line blank after the parameter close paren?
// Is this a multiline definition?
var reEnd;
if(this.match[3]) {
// If so, it is a multiline definition and the end of the body is marked with \end
reEnd = new RegExp("((?:^|\\r?\\n)[^\\S\\n\\r]*\\\\end[^\\S\\n\\r]*(?:" + $tw.utils.escapeRegExp(this.match[1]) + ")?(?:$|\\r?\\n))","mg");
// If so, the end of the body is marked with \end
reEnd = new RegExp("(\\r?\\n[^\\S\\n\\r]*\\\\end[^\\S\\n\\r]*(?:" + $tw.utils.escapeRegExp(this.match[1]) + ")?(?:$|\\r?\\n))","mg");
} else {
// Otherwise, the end of the definition is marked by the end of the line
reEnd = /($|\r?\n)/mg;

View File

@@ -90,7 +90,7 @@ Selectively refreshes the widget if needed. Returns true if the widget or any of
EditWidget.prototype.refresh = function(changedTiddlers) {
var changedAttributes = this.computeAttributes();
// Refresh if an attribute has changed, or the type associated with the target tiddler has changed
if(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.tabindex || changedAttributes.cancelPopups || changedAttributes.inputActions || changedAttributes.refreshTitle || changedAttributes.autocomplete || (this.getEditorType() !== this.editorType)) {
if(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.tabindex || changedAttributes.cancelPopups || changedAttributes.inputActions || changedAttributes.refreshTitle || changedAttributes.autocomplete || (changedTiddlers[this.editTitle] && this.getEditorType() !== this.editorType)) {
this.refreshSelf();
return true;
} else {

View File

@@ -217,7 +217,7 @@ Selectively refreshes the widget if needed. Returns true if the widget or any of
*/
LinkWidget.prototype.refresh = function(changedTiddlers) {
var changedAttributes = this.computeAttributes();
if($tw.utils.count(changedAttributes) > 0 || changedTiddlers[this.to]) {
if($tw.utils.count(changedAttributes) > 0) {
this.refreshSelf();
return true;
}

View File

@@ -42,24 +42,31 @@ Compute the internal state of the widget
*/
ParametersWidget.prototype.execute = function() {
var self = this;
this.parametersDepth = Math.max(parseInt(this.getAttribute("$depth","1"),10) || 1,1);
// Find the parent transclusions
var pointer = this.getContainingTransclude();
var pointer = this.parentWidget,
depth = this.parametersDepth;
while(pointer) {
if(pointer instanceof TranscludeWidget) {
depth--;
if(depth <= 0) {
break;
}
}
pointer = pointer.parentWidget;
}
// Process each parameter
if(pointer) {
// It's important to remember this, because when we refresh, we'll need to make sure this widget is starting at the same index.
this.initialParameterIndex = pointer.parameterIndex;
if(pointer instanceof TranscludeWidget) {
// Get the value for each defined parameter
$tw.utils.each($tw.utils.getOrderedAttributesFromParseTreeNode(self.parseTreeNode),function(attr) {
$tw.utils.each($tw.utils.getOrderedAttributesFromParseTreeNode(self.parseTreeNode),function(attr,index) {
var name = attr.name;
// If the attribute name starts with $$ then reduce to a single dollar
if(name.substr(0,2) === "$$") {
name = name.substr(1);
}
var value = pointer.getTransclusionParameter(name,self.getAttribute(attr.name,""));
var value = pointer.getTransclusionParameter(name,index,self.getAttribute(attr.name,""));
self.setVariable(name,value);
});
// We remember where we left the unnamed parameter index.
this.finalParameterIndex = pointer.parameterIndex;
// Assign any metaparameters
$tw.utils.each(pointer.getTransclusionMetaParameters(),function(getValue,name) {
var variableName = self.getAttribute("$" + name);
@@ -77,29 +84,13 @@ Refresh the widget by ensuring our attributes are up to date
*/
ParametersWidget.prototype.refresh = function(changedTiddlers) {
var changedAttributes = this.computeAttributes();
var pointer = this.getContainingTransclude();
var currentParameterIndex;
if(pointer) {
currentParameterIndex = pointer.parameterIndex;
}
if(Object.keys(changedAttributes).length || currentParameterIndex !== this.initialParameterIndex) {
if(Object.keys(changedAttributes).length) {
this.refreshSelf();
return true;
} else if(pointer) {
// We set the index for unnamed parameters for our $transclude widget in case any later $parameters show up. They need to be able to confirm their indices are starting in the right place, because if not, they need to refresh.
pointer.parameterIndex = this.finalParameterIndex;
}
return this.refreshChildren(changedTiddlers);
};
ParametersWidget.prototype.getContainingTransclude = function() {
var pointer = this.parentWidget;
while(pointer && !(pointer instanceof TranscludeWidget)) {
pointer = pointer.parentWidget;
}
return pointer;
};
exports.parameters = ParametersWidget;
})();

View File

@@ -358,26 +358,14 @@ TranscludeWidget.prototype.getOrderedTransclusionParameters = function() {
};
/*
The parameter index indicates is used by internal $parameter widgets to sequentially assign unnamed parameters.
Fetch the value of a parameter
*/
Object.defineProperty(TranscludeWidget.prototype, 'parameterIndex', {
get: function() { return this.claimedIndices || 0; },
set: function(value) { this.claimedIndices = value; }
});
/*
Fetch the value of a parameter given either its name or index
*/
TranscludeWidget.prototype.getTransclusionParameter = function(name,defaultValue) {
TranscludeWidget.prototype.getTransclusionParameter = function(name,index,defaultValue) {
if(name in this.stringParametersByName) {
return this.stringParametersByName[name];
} else {
// Let's see if this name was already assigned an index
var index = this.parameterIndex;
var name = "" + index;
if(name in this.stringParametersByName) {
// This parameter now corresponds to this index. No other parameters may correspond to it.
this.claimedIndices = index + 1;
return this.stringParametersByName[name];
}
}
@@ -460,8 +448,6 @@ Selectively refreshes the widget if needed. Returns true if the widget or any of
*/
TranscludeWidget.prototype.refresh = function(changedTiddlers) {
var changedAttributes = this.computeAttributes();
// Reset the parameter index so that internal $parameter widgets can double-check their unnamed parameter indices.
this.parameterIndex = 0;
if(($tw.utils.count(changedAttributes) > 0) || (this.transcludeVariableIsFunction && this.functionNeedsRefresh()) || (!this.transcludeVariable && changedTiddlers[this.transcludeTitle] && this.parserNeedsRefresh())) {
this.refreshSelf();
return true;

View File

@@ -153,7 +153,7 @@ Widget.prototype.getVariableInfo = function(name,options) {
} else if(variable.isFunctionDefinition) {
// Function evaluations
params = self.resolveVariableParameters(variable.params,actualParams);
var variables = options.variables || Object.create(null);
var variables = Object.create(null);
// Apply default parameter values
$tw.utils.each(variable.params,function(param,index) {
if(param["default"]) {

View File

@@ -1,24 +0,0 @@
title: Functions/FunctionFilterrunVariables
description: Functions in filter runs that set variables
type: text/vnd.tiddlywiki-multiple
tags: [[$:/tags/wiki-test-spec]]
title: Idiosyncrasy
caption: Idiosyncrasy Caption Field
+
title: Output
\whitespace trim
\procedure demo-subfilter() [<currentTiddler>]
\function .demo-function() [<currentTiddler>]
<$let currentTiddler="Idiosyncrasy">
<$text text={{{ [<currentTiddler>get[caption]!is[blank]else<currentTiddler>] :map[subfilter<demo-subfilter>] }}}/>,
<$text text={{{ [<currentTiddler>get[caption]!is[blank]else<currentTiddler>] :map[.demo-function[]] }}}/>
</$let>
+
title: ExpectedResult
<p>Idiosyncrasy Caption Field,Idiosyncrasy Caption Field</p>

View File

@@ -1,20 +0,0 @@
title: Functions/FunctionFilterrunVariables2
description: Functions in filter runs that set variables
type: text/vnd.tiddlywiki-multiple
tags: [[$:/tags/wiki-test-spec]]
title: Apple
cost: 5
+
title: Output
\whitespace trim
\function .doublecost() [<currentTiddler>get[cost]multiply[2]]
<$text text={{{ [[Apple]] :map[.doublecost[]] }}}/>
+
title: ExpectedResult
10

View File

@@ -1,16 +0,0 @@
title: Macros/EndInBody
description: \end line starting with non-whitespace is part of macro body
type: text/vnd.tiddlywiki-multiple
tags: [[$:/tags/wiki-test-spec]]
title: Output
\define hello()
hello \end
\end
Out: <<hello>>
+
title: ExpectedResult
<p>Out: hello \end</p>

View File

@@ -1,16 +0,0 @@
title: Macros/IndentedEnd
description: \end line starting with whitespace ends a macro body
type: text/vnd.tiddlywiki-multiple
tags: [[$:/tags/wiki-test-spec]]
title: Output
\define hello()
hello \end
\end
Out: <<hello>>
+
title: ExpectedResult
<p>Out: hello \end</p>

View File

@@ -1,16 +0,0 @@
title: Macros/MismatchedNamedEnd
description: Mismatched named end is part of the body
type: text/vnd.tiddlywiki-multiple
tags: [[$:/tags/wiki-test-spec]]
title: Output
\define hello()
\end goodbye
\end
Out: <<hello>>
+
title: ExpectedResult
<p>Out: \end goodbye</p>

View File

@@ -1,18 +0,0 @@
title: Macros/WhitespaceOnlyWithEnd
description: The /end should be detected when macro definition contains only whitespace
type: text/vnd.tiddlywiki-multiple
tags: [[$:/tags/wiki-test-spec]]
title: Output
\define max()
\end
Nothing
\end
Out: <<max>>
+
title: ExpectedResult
<p>Nothing
\end</p><p>Out: </p>

View File

@@ -1,15 +0,0 @@
title: Macros/WhitespaceOnlyWithEnd2
description: Line with \end can start with whitespace
type: text/vnd.tiddlywiki-multiple
tags: [[$:/tags/wiki-test-spec]]
title: Output
\define empty()
\end
Out: <<empty>>
+
title: ExpectedResult
<p>Out: </p>

View File

@@ -1,16 +0,0 @@
title: Procedures/EndInBody
description: \end line starting with non-whitespace is part of procedure body
type: text/vnd.tiddlywiki-multiple
tags: [[$:/tags/wiki-test-spec]]
title: Output
\procedure hello()
hello \end
\end
Out: <<hello>>
+
title: ExpectedResult
<p>Out: hello \end</p>

View File

@@ -1,16 +0,0 @@
title: Procedures/IndentedEnd
description: \end line starting with whitespace ends a procedure body
type: text/vnd.tiddlywiki-multiple
tags: [[$:/tags/wiki-test-spec]]
title: Output
\procedure hello()
hello \end
\end
Out: <<hello>>
+
title: ExpectedResult
<p>Out: hello \end</p>

View File

@@ -1,16 +0,0 @@
title: Procedures/MismatchedNamedEnd
description: Mismatched named end is part of the body
type: text/vnd.tiddlywiki-multiple
tags: [[$:/tags/wiki-test-spec]]
title: Output
\procedure hello()
\end goodbye
\end
Out: <<hello>>
+
title: ExpectedResult
<p>Out: \end goodbye</p>

View File

@@ -1,18 +0,0 @@
title: Procedures/WhitespaceOnlyWithEnd
description: The /end should be detected when procedure definition contains only whitespace
type: text/vnd.tiddlywiki-multiple
tags: [[$:/tags/wiki-test-spec]]
title: Output
\procedure max()
\end
Nothing
\end
Out: <<max>>
+
title: ExpectedResult
<p>Nothing
\end</p><p>Out: </p>

View File

@@ -1,15 +0,0 @@
title: Procedures/WhitespaceOnlyWithEnd2
description: Line with \end can start with whitespace
type: text/vnd.tiddlywiki-multiple
tags: [[$:/tags/wiki-test-spec]]
title: Output
\procedure empty()
\end
Out: <<empty>>
+
title: ExpectedResult
<p>Out: </p>

View File

@@ -1,38 +0,0 @@
title: Transclude/Parameterised/ConditionalParameters/Refreshed
description: Parameterised transclusion when conditional parameters are changed by a refresh
type: text/vnd.tiddlywiki-multiple
tags: [[$:/tags/wiki-test-spec]]
title: Output
\whitespace trim
\procedure elephant(filler)
<$let name={{Canary}}>
<% if [<name>match[yes]] %>
<$parameters A=defaultA>
A/<$text text=<<filler>>/>/<$text text=<<A>>/>/<$text text=<<B>>/>
</$parameters>
<% else %>
<$parameters B=defaultB>
B/<$text text=<<filler>>/>/<$text text=<<A>>/>/<$text text=<<B>>/>
</$parameters>
<% endif %>
\end elephant
-
<<elephant ignore A:myA B:myB>>
&#32;&#32;
<<elephant ignore myA myB>>
+
title: Canary
no
+
title: Actions
<$action-setfield $tiddler="Canary" text="yes"/>
+
title: ExpectedResult
<p>-A/ignore/myA/ A/ignore/myA/</p>

View File

@@ -1,30 +0,0 @@
title: Transclude/Parameterised/ConditionalParameters
description: Parameterised transclusion with conditional parameters
type: text/vnd.tiddlywiki-multiple
tags: [[$:/tags/wiki-test-spec]]
title: Output
\procedure elephant(filler)
\whitespace trim
<% if [[no]match[yes]] %>
<$parameters A=defaultA>
A/<$text text=<<filler>>/>/<$text text=<<A>>/>/<$text text=<<B>>/>
</$parameters>
<% else %>
<$parameters B=defaultB>
B/<$text text=<<filler>>/>/<$text text=<<A>>/>/<$text text=<<B>>/>
</$parameters>
<% endif %>
\end elephant
\whitespace trim
-
<<elephant ignore A:myA B:myB>>
&#32;&#32;
<<elephant ignore myB not-used>>
+
title: ExpectedResult
<p>-B/ignore//myB B/ignore//myB</p>

View File

@@ -0,0 +1,34 @@
title: Transclude/Parameterised/Depth
description: Parameterised transclusion using the $depth attribute
type: text/vnd.tiddlywiki-multiple
tags: [[$:/tags/wiki-test-spec]]
title: Output
\whitespace trim
<$transclude $tiddler='TiddlerOne' one='Ferret'/>
|
<$transclude $tiddler='TiddlerOne'/>
|
<$transclude $tiddler='TiddlerOne' one='Ferret' $$two="Osprey"/>
|
<$transclude $tiddler='TiddlerOne' $$two="Falcon"/>
+
title: TiddlerOne
\whitespace trim
{{TiddlerTwo}}
+
title: TiddlerTwo
\whitespace trim
<$parameters one='Jaguar' $$two='Piranha' $depth="2">
<$text text=<<one>>/>:<$text text=<<$two>>/>
</$parameters>
<$parameters one='Leopard' $$two='Coelacanth'>
(<$text text=<<one>>/>|<$text text=<<$two>>/>)
</$parameters>
+
title: ExpectedResult
<p>Ferret:Piranha(Leopard|Coelacanth)|Jaguar:Piranha(Leopard|Coelacanth)|Ferret:Osprey(Leopard|Coelacanth)|Jaguar:Falcon(Leopard|Coelacanth)</p>

View File

@@ -1,38 +0,0 @@
title: Transclude/Parameterised/GenesisChangingCount
description: Parameterised transclusion using genesis can handle refreshes that change number of parameters
type: text/vnd.tiddlywiki-multiple
tags: [[$:/tags/wiki-test-spec]]
title: Output
\procedure elephant(filler)
\whitespace trim
<$text text=<<filler>>/>-
<$let args={{Canary}}>
<$genesis $type=$parameters $names="[enlist<args>]" $values="[enlist<args>addsuffix[-default]]">
<$text text=`($(argA)$-$(argB)$-$(argC)$)` />
</$genesis>
</$let>
<$parameters other=other-default>
-<$text text=<<other>>/>
\end elephant
-
<<elephant filler argA:myA argB:myB argC:myC other:myOther>>
<<elephant filler myA myB myC myOther>>
+
title: Canary
argA argB
+
title: Actions
<$action-setfield $tiddler="Canary" text="argA argB argC"/>
+
title: ExpectedResult
<p>-
filler-(myA-myB-myC)-myOther
filler-(myA-myB-myC)-myOther
</p>

View File

@@ -1,34 +0,0 @@
title: Transclude/Parameterised/GenesisChangingNames
description: Parameterised transclusion using genesis can handle refreshes that change parameter names
type: text/vnd.tiddlywiki-multiple
tags: [[$:/tags/wiki-test-spec]]
title: Output
\procedure elephant(filler)
\whitespace trim
<$let name={{Canary}}>
<$genesis $type=$parameters $names="[<name>]" $values="default">
<$text text=<<First>>/>/<$text text=<<Second>>/>
</$genesis>
</$let>
\end elephant
\whitespace trim
-
<<elephant ignore First:init Second:var>>
-
<<elephant ignore var>>
+
title: Canary
First
+
title: Actions
<$action-setfield $tiddler="Canary" text="Second"/>
+
title: ExpectedResult
<p>-/var-/var</p>

View File

@@ -1,44 +0,0 @@
title: Transclude/Parameterised/NestedParameters/Refreshed
description: Parameterised transclusion with nested parameter widgets and a refresh cycle
type: text/vnd.tiddlywiki-multiple
tags: [[$:/tags/wiki-test-spec]]
title: Output
\procedure elephant(first:"one",second:"two")
\whitespace trim
\parameters (third:"three")
<$let variable={{Canary}}>
<$parameters fourth=four>
<$text text=<<first>>/>/<$text text=<<second>>/>/<$text text=<<third>>/>/<$text text=<<fourth>>/>
</$parameters>
</$let>
\end elephant
Begin
<<elephant>>
<<elephant "a" "b" "c" "d">>
<<elephant second:named a c d>>
<<elephant third:3rd second:2nd a d>>
<<elephant fourth:4th>>
<<elephant a fourth:4th>>
+
title: Canary
Else
+
title: Actions
<$action-setfield $tiddler="Canary" text="Something"/>
+
title: ExpectedResult
<p>Begin
one/two/three/four
a/b/c/d
a/named/c/d
a/2nd/3rd/d
one/two/three/4th
a/two/three/4th
</p>

View File

@@ -1,34 +0,0 @@
title: Transclude/Parameterised/NestedParameters
description: Parameterised transclusion with nested parameter widgets
type: text/vnd.tiddlywiki-multiple
tags: [[$:/tags/wiki-test-spec]]
title: Output
\procedure elephant(first:"one",second:"two")
\whitespace trim
\parameters (third:"three")
<$parameters fourth=four>
<$text text=<<first>>/>/<$text text=<<second>>/>/<$text text=<<third>>/>/<$text text=<<fourth>>/>
</$parameters>
\end elephant
Begin
<<elephant>>
<<elephant "a" "b" "c" "d">>
<<elephant second:named a c d>>
<<elephant third:3rd second:2nd a d>>
<<elephant fourth:4th>>
<<elephant a fourth:4th>>
+
title: ExpectedResult
<p>Begin
one/two/three/four
a/b/c/d
a/named/c/d
a/2nd/3rd/d
one/two/three/4th
a/two/three/4th
</p>

View File

@@ -24,7 +24,7 @@ The standard fields are:
Other fields used by the core are:
|!Field Name |!Description |
|`class` |<<.from-version "5.1.16">> <<lingo class>> |
|`class` |<<lingo class>> |
|`code-body` |<<.from-version "5.2.1">> <<lingo code-body>> |
|`color` |<<lingo color>> |
|`description` |<<lingo description>> |

View File

@@ -67,35 +67,8 @@ This is <<name>> demonstrates <<desc>>.
<<myproc>>
""">>
!! When Using Positional Parameters
It is uncommon to require multiple parameters pragma in a definition, but if you do so, the positions for parameters are assigned sequentially in the order of discovery. In the below example, `a` is the second positional parameter, because it comes after `x`:
<$macrocall $name=wikitext-example-without-html
src='<$let myprog="""
\parameters (x:10)
\parameters (a:100, b:200)
x=<<x>>, a=<<a>>, b=<<b>>
""">
<<myprog 50 73>>
</$let>'
/>
This behavior is the same when parameters are defined in the procedure's declaration.
<<wikitext-example-without-html
src:"""\procedure myproc(x:10)
\parameters (a:100, b:200)
x=<<x>>, a=<<a>>, b=<<b>>
\end
<<myproc 50 73>>
""">>
This is because a procedures are a shortcut syntax for the <<.wlink SetWidget>> widget with an implicit <<.wlink ParametersWidget>> widget.
<<.tip "The positional parameters are only required when using the parameterised transclusion shortcut syntax, and that in other cases it is generally clearer to use named parameters.">>
!! Caution in Using Positional Parameters
Procedures are a shortcut syntax for the SetVariableWidget with an implicit ParametersWidget, so generally there is no reason to have multiple parameters widgets within a definition. In the below example when passing `x` to `myproc`, it will also be set to `a`:
<<wikitext-example-without-html
src:"""\procedure myproc(x:10)
@@ -104,5 +77,34 @@ src:"""\procedure myproc(x:10)
x=<<x>>, a=<<a>>, b=<<b>>
\end
<<myproc a:73>>
<<myproc 50>>
""">>
The reason for that result is clearer if we consider an equivalent with explicit parameters widgets.
<$macrocall $name=wikitext-example-without-html
src='<$let myprog="""
\parameters (x:10)
\parameters (a:100, b:200)
x=<<x>>, a=<<a>>, b=<<b>>
""">
<<myprog 50>>
</$let>'
/>
This is because those two parameters widgets are entirely independent. They are both processed as if the other parameter widget is not there.
<<.tip "The positional parameters are only required when using the parameterised transclusion shortcut syntax, and that in other cases it is generally clearer to use named parameters.">>
To prevent such situation of above example, pass parameters by name as below.
<<wikitext-example-without-html
src:"""\procedure myproc(x:10)
\parameters (a:100, b:200)
x=<<x>>, a=<<a>>, b=<<b>>
\end
<<myproc x:50>>
""">>

View File

@@ -13,13 +13,17 @@ There are shortcuts for common scenarios that can often make it unnecessary to u
* the [[Pragma: \procedure]] for declaring procedure
* the [[Pragma: \widget]] for declaring custom widgets
The <<.wlink ParametersWidget>> widget must be used directly when the default value of a parameter must be computed dynamically.
The <<.wlink ParametersWidget>> widget must be used directly in the following situations:
* When the default value of a parameter must be computed dynamically
* When the `$depth` attribute is used to retrieve parameters from a parent transclusion (see below)
! Content and Attributes
The content of the <<.wlink ParametersWidget>> widget is the scope within which the values of the parameters can be accessed as ordinary variables.
|!Attribute |!Description |
|$depth |The index of the parent transclusion from which to obtain the parameters (defaults to 1). See below |
|$parseMode |Optional name of a variable in which is made available the parse mode of the content of the parent transclusion (the parse mode can be "inline" or "block") |
|$parseTreeNodes |Optional name of a variable in which is made available the JSON representation of the parse tree nodes contained within the parent transclusion |
|$slotFillParseTreeNodes |Optional name of a variable in which is made available the JSON representation of the parse tree nodes corresponding to each fill widget contained within the parent transclusion (as an object where the keys are the slot names and the values are the parse tree nodes) |
@@ -30,6 +34,9 @@ The content of the <<.wlink ParametersWidget>> widget is the scope within which
<<.note "Note the special treatment required for parameters names that start with a `$`; this can be avoided by using one of the pragmas">>
!! `$depth` Attribute
By default, the <<.wlink ParametersWidget>> widget retrieves parameters from the immediate parent transclusion. The `$depth` attribute permits access to the parameters of parent transclusions by specifying an index to the parent to be inspected ("1" is the immediate parent, "2" is the parent of that parent, etc.). This is useful in some situations where an intervening transclusion prevents immediate access to desired parameters.
!! `$parseMode`, `$parseTreeNodes`, `$slotFillParseTreeNodes` and `$params` Attributes

View File

@@ -24,7 +24,8 @@ In this simple form, parameters passed by position not by name. So the first val
''Remarks''
# Passing parameter by name is good practice and is recommended for clarity. So for parameterized transclusions, the use of <<.wid transclude>> is recommended over simple form transclusion.
# However, if parameter values are passed by position, parameters get assigned sequentially based on the order <<.wlink ParametersWidget>> widgets are discovered.
# When passing parameters value by position, you cannot pass the second parameter while the first one has not been passed.
''Example iv'': Here the <<.wlink ParametersWidget>> widget is used to declare a parameter whose default value is transcluded from another tiddler.
@@ -35,17 +36,4 @@ My name is <<name>> and my age is <<age>>.
\end
<$transclude $variable="myproc" age="19"/>
"""/>
''Example v'': Here the <<.wlink ParametersWidget>> widget is used in addition to other parameter declarations, because later parameters depend on the value of earlier parameters. Positional values are assigned sequentially.
<$macrocall $name=".example" n="5" eg="""\procedure myproc(age: 22)
<$parameters acceptable-age={{{ [<age>divide[2]add[7]] }}} >
If you're <<age>>, you can date a <<acceptable-age>>-year-old and it's not weird.
</$parameters>
\end
<<myproc>>
<<myproc 30>>
<<myproc 35 70>>
""" />
"""/>

View File

@@ -5,7 +5,6 @@ author: 一个插件作者的姓名
bag: 条目的来源集的名称
caption: 显示于页签或按钮上的标题文字
code-body: 若设置为 ''yes'',视图模板将以程式码形式显示条目
class: 渲染条目时,套用到条目的 CSS 类别 - 请参阅[[依自订类别的自订样式|Custom styles by user-class]]。也适用于[[互动窗口|Modals]]
color: 条目的 CSS 颜色值
component: 负责[[提醒条目|AlertMechanism]]的组件名称
core-version: 对于一个插件,表示与其兼容的 TiddlyWiki 版本

View File

@@ -4,7 +4,6 @@ _canonical_uri: 外部圖片條目的完整的 URI
author: 一個插件作者的姓名
bag: 條目的來源集的名稱
caption: 顯示於頁籤或按鈕上的標題文字
class: 渲染條目時,套用到條目的 CSS 類別 - 請參閱[[依自訂類別的自訂樣式|Custom styles by user-class]]。也適用於[[互動視窗|Modals]]
code-body: 若設定為 ''yes'',檢視範本將以程式碼形式顯示條目
color: 條目的 CSS 顏色值
component: 負責[[警示條目|AlertMechanism]]的元件名稱

View File

@@ -1,7 +1,7 @@
{
"name": "tiddlywiki",
"preferGlobal": "true",
"version": "5.3.4-prerelease",
"version": "5.3.3",
"author": "Jeremy Ruston <jeremy@jermolene.com>",
"description": "a non-linear personal web notebook",
"contributors": [

View File

@@ -1589,7 +1589,7 @@ html body.tc-body.tc-single-tiddler-window {
grid-template-areas:
"toolbar toolbar"
"editor preview";
grid-template-columns: repeat(2, minmax(0px, 1fr));
grid-template-columns: 1fr 1fr;
grid-template-rows: auto 1fr;
}