\procedure edit-field(target-field, alias, target-tiddler)
How to set the default value of the parameter target-tiddler as currentTiddler
\procedure edit-field(target-field, alias, target-tiddler)
How to set the default value of the parameter target-tiddler as currentTiddler
Old technique:
Use a $let widget at the beginning of the procedure, like this:
<$let target-tiddler={{{ [<target-tiddler>!match[]else<currentTiddler>] }}}>
If you invoke the procedure with a value for target-tiddler, that value is used. If you omit the target-tiddler parameter or pass in a blank value (i.e., target-tiddler:"") the <<currentTiddler>> will be used as a default value.
New technique:
Use a $parameters widget at the beginning of the procedure, like this:
<$parameters target-tiddler=<<currentTiddler>>>
If you invoke the procedure with a value for target-tiddler, that value is used, even if it is a blank value (i.e., target-tiddler:""). If you completely omit the target-tiddler parameter the <<currentTiddler>> will be used as a default value.
-e
Thanks @EricShulman . That works well. I was also trying the parameter widget
I tried like this
<$parameters
target-tiddler={{{ [<target-tiddler>] ~[<currentTiddler>] }}}
>
But that didn’t worked. What was wrong with that filter used to assign the variable
It’s a little unintuitive, but the filter run [<target-tiddler>] has an output even if <<target-tiddler>> is undefined — in that case, the “empty” title [[]] — so your fallback filter run ~[<currentTiddler>] is never used. To get around this, you need to explicitly remove the empty result:
[<target-tiddler>!match[]] ~[<currentTiddler>] (as Eric did in his $let widget example)[<target-tiddler>!is[blank]] ~[<currentTiddler>]
Incidentally, field transclusions work the same way: [{!!target-field}] ~[<currentTiddler>] will always use the field value, even if target-field is empty or nonexistent. Again, you’d need to use {!!target-field}!match[] or {!!target-field}!is[blank] before your fallback value.
I want to add another parameter alias whose default value should be the title of the target-tiddler
How to define alias parameter to achieve this ?
Edit:
<$parameters
target-tiddler=<<currentTiddler>>
alias={{{ [<target-tiddler>get[title]] }}}
>
The above given code does the trick
[<target-tiddler>get[title]] is equivalent to [<target-tiddler>], so you should be able to simplify that parameter definition to alias=<<target-tiddler>>.
Why there is a difference in the the way variable target-tiddler is defined by let and parameters widget in this example given by Eric ?
The $parameters widget does the assignment only when no target-tiddler parameter was passed in to the procedure. It considers a blank parameter value ("") to still be a valid parameter.
In contrast, the $let widget is checking for “!match[]”, which will be true if no target-tiddler parameter value was passed in OR if the value that was passed in is blank.
-e