On Thursday, November 12, 2020 at 6:06:14 AM UTC-8, Anthony wrote:
>
> Thanks Eric, I guess the '<currentTiddler>' just creates a filtered list 
> from the current tiddler and whether text is displayed depends on this 
> being null or not.
>

"[<currentTiddler>has[death-date]]" means "if the current tiddler has a 
non-blank death-date field"

Without using <currentTiddler> at the beginning of the filter, then filter 
would be applied to ALL tiddlers by default,
and "has[death-date]" would produce output for every tiddler with a 
non-blank death-date field, not just the current one.

Now, using the same methodology, I'm trying to construct an external link 
> and tried:
>
> <$list filter="[<currentTiddler>has[orcid]]">
>    ''ORCID'': [[{{!!orcid}}|https://orcid.org/{{!!orcid}}]]
> </$list>
>

The problem here is that TiddlyWiki syntax doesn't "nest".  That is, you 
can't use one kind of syntax
such as transclusion -- {{!!orcid}} -- within another, such as a link -- 
[[text|url]].

You can, however, *construct* the link syntax by using a macro, like this:
\define mylink() [[$(this_orcid)$|https://orcid.org/$(this_orcid)$]]

<$list filter="[<currentTiddler>get[orcid]]" variable="this_orcid">
   ''ORCID'': <<mylink>>
</$list>

Note that the filter uses "get[orcid]" rather than "has[orcid]". This not 
only tests to see if the "orcid" field is non-blank, but also fetches it's 
value, which is set into the "this_orcid" variable. Then, the 
$(this_orcid)$ syntax within the macro does a string substitution, based on 
the current value of the "this_orcid" variable.

Note also that the $(...)$ syntax can only be used within a macro.  Keep in 
mind that macros only do two things:

   1. replace instances of $(...)$ with values from variables, where the 
   variables are defined *outside* of the macro
   2. replace instances of $...$ with values from parameters, where the 
   parameters are passed into the macro

All other processing of the macro output is performed by the calling 
context.  In the above example, this means the resulting link syntax -- 
[[foo|https:/orcid.org/foo]] -- is parsed and wikified after being 
"returned" from the macro.

Another point about macro syntax:  if you want to use the "parameter" 
method to pass the "this_orcid" value into the macro, you would write 
something like this:
\define mylink(id) [[$id$|https://orcid.org/$id$]]

<$list filter="[<currentTiddler>get[orcid]]" variable="this_orcid">
   ''ORCID'': <$macrocall $name="mylink" id=<<this_orcid>> />
</$list>

Note the use of the <$macrocall> widget to invoke the "mylink" macro with 
the "id" parameter set to the current value of the "this_orcid" variable. 
This is needed because you can't nest the variable reference -- 
<<this_orcid>> within the shorthand <<mylink>> syntax; i.e., you CANNOT 
write <<mylink <<this_orcide>>>> because the closing ">>" of the variable 
reference would be seen as ending the enclosing macro, with the second ">>" 
being left over to "fall out" as displayed text.

TiddlyWiki syntax is consistent, but somewhat less flexible than other 
languages.  While this may be a little confusing at first, once you get 
used to it's peculiarities, it becomes easier.
 

> Apologies, I can't figure out how to format the code in monospace in a 
> grey-background box.
>

That is a feature of the old GoogleGroups editing interface that they have 
inexplicably left out of the new interface. To view this group using the 
old interface (which I prefer), you can use a URL like this:

https://groups.google.com/forum/?oldui=1#!forum/tiddlywiki

enjoy,
-e

-- 
You received this message because you are subscribed to the Google Groups 
"TiddlyWiki" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/tiddlywiki/1742cfe6-67cf-4432-8314-f5da30dc021co%40googlegroups.com.

Reply via email to