Thank you for the compliment, I am glad it is understandable.
And while there are definitely people in this group with far more knowledge 
then me I am happy to help when I can.




On Monday, 14 September 2020 16:28:33 UTC+2, Charlie Veniot wrote:
>
> Holy guacamole, that is a thing of beauty.
>
> I think I get it.  Seeing a macro and filter in the context of some thing 
> I want to do, that kind of practical perspective makes things pretty clear.
>
> Thank-you so much !  I have to figure out how to intertwingle some 
> studying time (for all of this) with all of my little projects.
>
> FUN!
>
> On Monday, September 14, 2020 at 8:31:27 AM UTC-3, Felicia Crow wrote:
>>
>> Hi,
>> so actually the answer is probably not going to be much longer it just 
>> contains a macro example and an explanation of how it works. The macro 
>> itself can live in any tiddler tagged with $:/tags/Macro.
>>
>> So first here is the actual macro:
>> \define RenderContent(id)
>> <$vars purpose={{{[has[purpose]get[purpose]]}}} id="$id$">
>> <$list filter=
>> "[!has[draft.of]field:tiddler-id<id>field:context<purpose>]">
>> <$transclude tiddler=<<currentTiddler>> mode="block"/>
>> </$list>
>> </$vars>
>> \end
>>
>> And while it is a more configureable version of my former solution here 
>> is a breakdown of how it works
>>
>>    - First the macro sets two variables: Purpose via an inline filter 
>>    and id which it gets from the macro parameter. For the inline filter all 
>> it 
>>    does is looking for a tiddler with the field purpose and then gets this 
>>    fields value. This stops the reliance on title, but you will have to 
>> ensure 
>>    that there is always only one purpose field within the wiki.
>>    - The list filter then looks for a tiddler that is not currently 
>>    being in editmode - the !has[draft.of] part - and has two fields matching 
>>    the values from the variables. For one the context field being the same 
>> as 
>>    whatever is currently in purpose and the tiddler-id field being the same 
>> as 
>>    the id passed to the macro.
>>    - When a tiddler fullfilling these conditions is found it is 
>>    transcluded at the place the macro was called from.
>>
>>
>> To use the macro here is an example using Contents, but it is the exact 
>> same process for Title, Subtitle, every future tiddler having different 
>> text depending on context just with a different id.
>>
>>    - In the Contents tiddler you replace your line with the two 
>>    transclusions with <<RenderContent "Contents">>.
>>    - In Contents (Product Reviews) you add two fields. One is called 
>>    context and has a value of ProductReviews the other is called tiddler-id 
>>    and gets a value of Contents.
>>    - In Contents (Urban Off Gridding) the same two fields are added, 
>>    just that context now has a value of OffGridding.
>>
>> That's it, nothing changes visually, but if you decide that Contents - 
>> Product Reviews is a better title for instance the macro still works as 
>> expected.
>>
>> Since I worked with a local copy of your wiki to ensure that the macro is 
>> working as intended with the wiki it is inteded for I attached a json file 
>> containing the ten tiddlers - the macro itself plus the changed versions of 
>> Contents, Title, Subtitle - that you can just import and everything is set 
>> up as I described above should you prefer this route.
>>
>> Kind Regards,
>> Felicia
>>
>>
>> On Monday, 14 September 2020 04:00:09 UTC+2, Felicia Crow wrote:
>>>
>>> Seeing how I may should eventually remember that sleeping at night is a 
>>> thing a short answer for now, but I will return with a longer answer and 
>>> possible examples later.
>>>
>>> The solution was mostly to keep it within the current framework and not 
>>> changing too much around. For a more centralised approach to the whole 
>>> system tags and or fields will probably get a more prominent role, both for 
>>> minimizing code duplication as well as dropping a reliance on titles.
>>> For instance the Content and Title tiddler could call the same macro 
>>> with their type - content and title respectively in this case - and the 
>>> macro filters for a tiddler with two fields: one named tiddler-type 
>>> matching what was send to the macro and the other named context matching 
>>> the context currently in your purpose field. Since this match is made via 
>>> the two fields the title also doesn't matter. This tiddler or more 
>>> correctly its title is returned to the tiddler which then transcludes the 
>>> result.
>>>
>>> I will write a more concrete example when my brain isn't on standby but 
>>> actually working again, but I hope that this may give you some idea already.
>>>
>>>
>>>
>>> On Monday, 14 September 2020 02:58:31 UTC+2, Charlie Veniot wrote:
>>>>
>>>> That looks A-1 to do on one tiddler needing to decide what content to 
>>>> show based on context, but how to do that once so that it can be used for 
>>>> a 
>>>> plethora of tiddlers that show different content based on context?
>>>>
>>>> I would not want to put that kind of code on each of my 
>>>> multi-context-handling tiddlers.
>>>>
>>>> For that code to exist generically once, I imagine each 
>>>> multi-context-tiddler would need some kind of macro call like:  
>>>> <<SetContextContent "Product Reviews Tiddler Name" "Urban Off Gridding 
>>>> Tiddler Name">>
>>>>
>>>> Aside from not doing that myself (for lack of macro and filter 
>>>> knowledge), I didn't want to go there because I often get tripped up 
>>>> setting these things up to not get screwed up every time I change tiddler 
>>>> titles (which I do repeatedly trying to get titles juuuuuust right.)
>>>>
>>>> Thoughts?  (i.e. how to do that so that both "Contents" tiddler and 
>>>> "Title" tiddler can call some macro that does what your code does, but 
>>>> works generically for every tiddler that needs it?)
>>>>
>>>> On Sunday, September 13, 2020 at 9:22:13 PM UTC-3, Felicia Crow wrote:
>>>>>
>>>>> Charlie,
>>>>>
>>>>> so first things first here is my version. This specific code would go 
>>>>> into Content, but it would look nearly the same with the other tiddlers. 
>>>>>
>>>>
>>>>> <$set name="purpose" filter="[[Alternate TiddlyWiki 
>>>>> Purposes]get[purpose]]">
>>>>> <$list filter="[<purpose>match[ProductReviews]]">
>>>>> {{Contents (Product Reviews)}}
>>>>> </$list>
>>>>> <$list filter="[<purpose>match[OffGridding]]">
>>>>> {{Contents (Urban Off Gridding)}}
>>>>> </$list>
>>>>> </$set>
>>>>>
>>>>> As for the explanation:
>>>>>
>>>>>    - The filter within set gets the current value of the purpose 
>>>>>    field that is in the tiddler with the title Alternate TiddlyWiki 
>>>>> Purposes.
>>>>>    - The filter in the list widget takes whatever was saved in set 
>>>>>    and compares it to the parameter in match. If it matches the list 
>>>>> widgets 
>>>>>    content will be rendered.
>>>>>
>>>>>
>>>>> The code in itself does pretty much the same as your two transclusion 
>>>>> templates just in one place, so I think it mostly comes down to personal 
>>>>> preference where you check what actually needs to be rendered.
>>>>>
>>>>> The only thing I could think of what this solution currently does 
>>>>> better is being more failsafe in its execusion. The way the transclusion 
>>>>> tiddlers in your version are written they only look for fields named 
>>>>> purpose which contains their respective value, so when one adds a field 
>>>>> purpose to another tiddler and gives it the opposite value both versions 
>>>>> will be rendered at the same time. Since this is a wiki only edited by 
>>>>> you 
>>>>> this probably won't happen, just realized it when I looked once more at 
>>>>> your templates while I wrote down my version.
>>>>>
>>>>> Felicia
>>>>>
>>>>>
>>>>> On Monday, 14 September 2020 01:23:18 UTC+2, Charlie Veniot wrote:
>>>>>>
>>>>>> G'day Felicia,
>>>>>>
>>>>>> Sure, I'd love to see how you'd go about it.  
>>>>>>
>>>>>> Since there are always multiple ways of doing things, if you have the 
>>>>>> time: quick thoughts on advantages/disadvantages of both for a quick 
>>>>>> back 
>>>>>> and forth about them?  Might be a pretty short back and forth: I don't 
>>>>>> have 
>>>>>> enough know-how to pickout the "pitfalls" (or "trappings") of various 
>>>>>> approaches?
>>>>>>
>>>>>> That aside: I'm kind of proud to have figured out a little something 
>>>>>> about filters in my last post 
>>>>>> <https://groups.google.com/g/tiddlywiki/c/ItNqeGWYX7Q>.
>>>>>>
>>>>>> On Sunday, September 13, 2020 at 6:03:04 PM UTC-3, Felicia Crow wrote:
>>>>>>>
>>>>>>> Hi Charlie,
>>>>>>>
>>>>>>> yes that was what I meant. I always find it interesting to learn the 
>>>>>>> thought process behind someones solution, since it often gives a 
>>>>>>> different 
>>>>>>> perspective on things that I would not have considered before, leads to 
>>>>>>> learning something new or both. So when I saw a solution I would not 
>>>>>>> have 
>>>>>>> thought of myself I was curious how this came to be.
>>>>>>>
>>>>>>> I sadly don't have any real tips for learning filters as it is one 
>>>>>>> of the things my brain was actually willing to learn at least the 
>>>>>>> basics 
>>>>>>> quite quickly, but if you want I could write up the solution I had in 
>>>>>>> mind 
>>>>>>> so that you can play around with it, if this would be something that 
>>>>>>> interests you/could help you.
>>>>>>>
>>>>>>> And to add something useful to the babbling at the top: A short 
>>>>>>> excursion about the difference between non-javascript and javascript 
>>>>>>> macros 
>>>>>>> at least as far as I learned it - definitely not an expert.
>>>>>>>
>>>>>>>
>>>>>>>    - Javascript macros are loaded in with everything else 
>>>>>>>    javascript before any processing happens as this is so to speak the 
>>>>>>> engine 
>>>>>>>    on which everything runs, so yes a javascript macro is already 
>>>>>>> loaded in 
>>>>>>>    when the startup actions are run.
>>>>>>>    - Non-javascript macros one the other hand exist at first only 
>>>>>>>    within the tiddler they where defined in. So for example if you have 
>>>>>>> a 
>>>>>>>    tiddler containing the definition for a macro called get-context you 
>>>>>>> would 
>>>>>>>    only be able to use this macro in the same tiddler. This is where 
>>>>>>> then the 
>>>>>>>    import pragma and tag $:/tags/Macro come in. Import is used as you 
>>>>>>> have 
>>>>>>>    done to allow use of a specific macro in the tiddler it was imported 
>>>>>>> to. 
>>>>>>>    The tag $:/tags/Macro on the other hand allows you to mark the macro 
>>>>>>> as 
>>>>>>>    global so that you can use it where ever you want without having to 
>>>>>>>    specifically import it each time. This is were the exception you 
>>>>>>> reference 
>>>>>>>    comes in. Since the startup actions run before the tagged macros are 
>>>>>>>    processed to make them globally available you need to import 
>>>>>>> non-javascript 
>>>>>>>    macros even if they are properly tagged.
>>>>>>>    
>>>>>>>
>>>>>>> Hope you can take away at least something from this and it wasn't 
>>>>>>> too confusing.
>>>>>>>
>>>>>>> Happy Sunday for you as well.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Sunday, 13 September 2020 20:47:35 UTC+2, Charlie Veniot wrote:
>>>>>>>>
>>>>>>>> G'day Felicia,
>>>>>>>>
>>>>>>>> Hi Charlie,
>>>>>>>>>
>>>>>>>>> love the concept and very impressiv what you managed to put 
>>>>>>>>> together, thank you for sharing.
>>>>>>>>>
>>>>>>>>
>>>>>>>> Thank-you!  Of course, let's keep in mind that, in martial arts 
>>>>>>>> terms, I'm not quite a TiddlyWiki yellow belt yet, so I'm sure there 
>>>>>>>> are 
>>>>>>>> many things that could be improved !
>>>>>>>>  
>>>>>>>>
>>>>>>>>>
>>>>>>>>> If you don't mind asking, is there a specific reason for placing 
>>>>>>>>> the decision for what to transclude in the two templates themselves 
>>>>>>>>> and 
>>>>>>>>> always calling both of them?
>>>>>>>>> Personally I would have put the decision in the root tiddler - 
>>>>>>>>> e.g. TiddlyWiki Title - via a match filter and only called what was 
>>>>>>>>> needed, 
>>>>>>>>> so I wonder if there is something I am missing/not thinking about or 
>>>>>>>>> if it 
>>>>>>>>> is just another case of multiple ways to achieve the same result.
>>>>>>>>>
>>>>>>>>
>>>>>>>> I suspect that you are talking about this way of deciding what to 
>>>>>>>> show based on context: {{TiddlyWiki Title 1||tPr}}{{TiddlyWiki Title 
>>>>>>>> 2||tOg}}
>>>>>>>>
>>>>>>>> I chose that way of doing things because I'm having a hard time 
>>>>>>>> wrapping my mind around filters, but I think I've got transclusion 
>>>>>>>> templates down pat.
>>>>>>>>
>>>>>>>> So I saw that mechanism as a quick (and non-cryptic) and easily 
>>>>>>>> repeatable method across the board, for example:
>>>>>>>>
>>>>>>>>    - the "content" tiddler (included in my "navigation" tiddler 
>>>>>>>>    that shows in the sidebar) has {{Contents (Product 
>>>>>>>>    Reviews)||tPr}}{{Contents (Urban Off Gridding)||tOg}} to show 
>>>>>>>> different 
>>>>>>>>    navigation links depending on context
>>>>>>>>    - I may want to show other tiddlers different ways depending on 
>>>>>>>>    context ...
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>> Oh and one thing I noticed, just as an info: Since 
>>>>>>>>> getstartupcontext is a javascript macro you don't actually need to 
>>>>>>>>> import 
>>>>>>>>> it. Unlike normal macros javascript macros are always global.
>>>>>>>>>
>>>>>>>>
>>>>>>>> Maybe I misunderstood something when I put that import there.  I 
>>>>>>>> thought that "StartupAction" tiddlers, because they are processed so 
>>>>>>>> early, 
>>>>>>>> didn't have access to any macros unless they are imported.  Does that 
>>>>>>>> just 
>>>>>>>> apply to non-javascript macros ?
>>>>>>>>  
>>>>>>>>
>>>>>>>>>
>>>>>>>>> Kind Regards,
>>>>>>>>> Felicia
>>>>>>>>>
>>>>>>>>
>>>>>>>> Cheers, best regards, and Happy Sunday !
>>>>>>>>  
>>>>>>>>
>>>>>>>

-- 
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 tiddlywiki+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/tiddlywiki/b50d090b-08a9-4384-a25d-7e545a34d1e9o%40googlegroups.com.

Reply via email to