Ok, I got it working. I forgot my original source was based off of the 
LinkStyle (http://linkstyle.tiddlyspot.com), which I had seen in one of 
Matt's previous email threads. Once I restored the original wrapping 
widgets, Télumire's SVG-handling code provided the missing piece. After a 
bit of style tweaking, I got what I was after with this:

\rules only filteredtranscludeinline transcludeinline macrodef 
macrocallinline html

\define linkstyle()
<$set name="uri" value=<<makedatauri """$(tid)$""" "text/plain">> >
  <$list variable="urititle" 
filter="""[<uri>removeprefix[data:text/plain,]]""">
    a[href="#<<urititle>>"]:before{ content: " "; margin-right:.5ch; 
display: inline-block; height:1em; width:1em; background: center / contain 
no-repeat var(`--`url); }

    <$vars fill="primary">
      a[href="#<<urititle>>"]:before{<$vars 
svg={{!!icon}}>{{||$:/ThemeTweaks/svg/url}}</$vars>}
    </$vars>

    <$vars fill="primary">
      a[href="#<<urititle>>"]:visited:before{<$vars 
svg={{!!icon}}>{{||$:/ThemeTweaks/svg/url}}</$vars>}
    </$vars>

    <$vars fill="primary">
      a[href="#<<urititle>>"]:hover:before{<$vars 
svg={{!!icon}}>{{||$:/ThemeTweaks/svg/url}}</$vars>}
    </$vars>
  </$list>
</$set>
\end

<$list filter="""[has[icon]]""">
  <$vars tid={{!!title}}>
    <<linkstyle>>
  </$vars>
</$list>

I see now that I can use $vars and """$()"""" to pass dynamic arguments to 
a macro, so that answers my earlier question. I'm still curious if there's 
a terser way to accomplish this, though.

Here's what it looks like:

[image: Govos Cloud Search — notes and thoughts from an architect.png]

Now I can set an "icon" field for a tiddler that points to a SVG, and any 
link to that tiddler will show that icon in the link. Combined with SVGs 
I'm pulling in from https://morosanuae.github.io/tw-icons/ along with a few 
of my own for smaller libraries that still have logos but aren't published, 
and I'm where I want to be... for now, at least!

Thanks again for all the help!
On Saturday, December 11, 2021 at 5:55:01 PM UTC-8 Evan Sherwood wrote:

> Thanks for the info and references everyone.
>
> I feel like I'm so close to getting this working... here's my revised 
> code, based off of code examples from Télumire:
>
> \rules only filteredtranscludeinline transcludeinline macrodef 
> macrocallinline html
>
> <$list filter="""[has[icon]]""">
>   <$set name="uri" value=<<makedatauri text:{{!!title}} 
> type:"text/plain">> >
>
>     <$list variable="urititle" 
> filter="""[<uri>removeprefix[data:text/plain,]]""">
>
>       <$vars fill="external-link-foreground">
>         a[href="#<<urititle>>"]:before{<$vars 
> svg={{!!icon}}>{{||$:/ThemeTweaks/svg/url}}</$vars>}
>       </$vars>
>
>       <$vars fill="external-link-foreground-visited">
>         a[href="#<<urititle>>"]:visited:before{<$vars 
> svg={{!!icon}}>{{||$:/ThemeTweaks/svg/url}}</$vars>}
>       </$vars>
>
>       <$vars fill="external-link-foreground-hover">
>         a[href="#<<urititle>>"]:hover:before{<$vars 
> svg={{!!icon}}>{{||$:/ThemeTweaks/svg/url}}</$vars>}
>       </$vars>
>     </$list>
>   </$set>
> </$list>
>
> My issue now is the "text" argument to the makedatauri macro; it needs to 
> be dynamic, but everything I've tried interprets the value literally—so I 
> get an encoded {{!!title}} instead of the encoded actual title of the 
> tiddler. I also tried assigning it as a variable using another $set widget 
> but no luck. I feel like I'm missing some syntax... 
>
> On Saturday, December 11, 2021 at 11:49:10 AM UTC-8 Mat wrote:
>
>> I don't know if it is relevant but by mere coincidence I was fiddling 
>> around with images in TW and stumbled across this. Check it out.
>>
>> https://stackoverflow.com/questions/10768451/inline-svg-in-css
>>
>> The $(...)$ syntax is... let's back up: 
>> $*$ is used to apply the argument value of a macro parameter. But the 
>> $(*)$ syntax allows you to use a variable value from outside of the macro, 
>> and that was not included as an argument in the macro. (I'm probably not 
>> using the terminology correct.)
>>
>> <:-)
>>
>> On Saturday, December 11, 2021 at 6:31:03 AM UTC+1 [email protected] 
>> wrote:
>>
>>> I'm trying to get a stylesheet working that will automatically insert 
>>> the SVG icon before the link text. Here's what I have so far:
>>>
>>> \define link-icon-style()
>>> <$set name="uri" value=<<makedatauri """$(tid)$""" "text/plain">> >
>>>   <$set name="icon" tiddler=<<tid>> field="icon">
>>>     <$set name="iconsrc" tiddler=<<icon>> >
>>>       <$list variable="urititle" 
>>> filter="""[<uri>removeprefix[data:text/plain,]]""">
>>>         <style>
>>>           a[href="#<<urititle>>"] { display: inline-flex; align-items: 
>>> baseline; gap: .15em; }
>>>           a[href="#<<urititle>>"]:before { content: <<makedatauri 
>>> """$(iconsrc)$""" "image/svg+xml">>; width: 1em; height: 1em; margin-top: 
>>> 2px; align-self: center; fill: <<colour tiddler-link-foreground>>; }
>>>         </style>
>>>       </$list>
>>>     </$set>
>>>   </$set>
>>> </$set>
>>> \end
>>>
>>> <$list filter="""[has[icon]]""">
>>>   <$vars tid={{!!title}}>
>>>     <<link-icon-style>>
>>>   </$vars>
>>> </$list>
>>>
>>> When I inspect the DOM and look at the <style> tag created, the value of 
>>> my `content` CSS rule shows as an <a>... specifically a TiddlyWiki external 
>>> link. I think some value is being interpreted as WikiText instead of plain 
>>> text somewhere, but I'm several hours deep into head-banging on the issue 
>>> so I'm reaching out for help.
>>>
>>> I'm a veteran JS programmer but a TiddlyWiki n00b. :)
>>>
>>> Anyone see what I'm doing wrong here?
>>>
>>> ---
>>>
>>> Also, what is the $()$ syntax? I couldn't find documentation on it... 
>>> I'm guessing because I don't know what it's called and thus don't know the 
>>> right term to search for.
>>>
>>

-- 
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/27f03c13-d76c-473e-a71d-343070fed2c7n%40googlegroups.com.

Reply via email to