subfilters are key! I just came across 'filter' operator and I'm pretty 
much confident it can do what I want.
So far I was able to implement this test code

<$set name="subf" value="[getindex[IT-01]split[,]trim[]match<keyword>]">
            
    <$list filter="[tag[dict-AR]filter<subf>]" variable="entry">
             <<entry>> <br/>
    </$list>
        
</$set>

which behaves the way I want because the filter in the inner <$list> scans 
ALL the dictionary entries (tag[dict-AR]) and outputs those whose IT-01 
index's content matches the keyword dominantly appending them -that's the 
word I was missing- to the output, so ridding the output of any duplicates.
Now the problem is to parameterize the code so to have it run on ALL the 
indexes (IT-01, IT-02, IT-03, ...) of every data tiddler, and this last 
step, once again, is CHALLENGING.

On Saturday, November 20, 2021 at 2:20:38 PM UTC+2 PMario wrote:

> On Saturday, November 20, 2021 at 12:12:54 PM UTC+1 CarloGgi wrote:
>
>> Hi PMario, thanks a lot, indeed my code is inconsistent because in an 
>> attempt to give a generic example, not tied tho the specific issue, I tried 
>> to simplify it (and I ended up to over-simplify it). 
>>
>
> I thought about this, that's why I did try to create something that could 
> have been a possibility and shows how TW filters work. .. Filters are the 
> powerful thing in TW. 
>
> If you come from a programmers background, TW is different and needs a bit 
> of a different thinking, because it is targeted to non-programmers ... 
>
> The whole TW UI is built with filters and wikitext templates and makes 
> heavy use of recursions especially in the core code. 
>  
>
>> Lots of stuff to reply to, let's go through it point by point:
>>
>> 1. indeed widgets are no programming language, that's why I used the word 
>> 'environment', not 'language';
>>
>
> Widgets don't have a return value ... They manipulate the DOM ... eg:
>
> ```
> <ul>
> <$list filter="[tag[todo]]">
>   <li><$text text=<<currentTiddler>> /></li>
> </$list>
> </ul>
> ```
>
> From a programmers point of view, you'd probably want to "add" some 
> variables inside the "list -loop"... But
>
> Let's say I have 2 tiddlers "a" and "b" tagged "todo"
> `[tag[todo]]` returns a list and the list widget internally assigned the 
> element to an internal variable named `currentTiddler`, then it iterates 
> over the list and outputs the dom elements in the "list-body". 
>
> The "list-body" is between `<$list filter ...>   list body is here 
> </$list>` which looks similar to a function, but it isn't...
>
> The resulting HTML code will look like this: 
>
> ```
> <ul> 
>   <li>a</li>
>   <li>b</li>
> </ul>
> ```
>
> So widgets don't calculate variables, they are used to manipulate the HTML 
> output ....
>
> ```
> <ul>
> <$list filter="[tag[todo]]">
>  <li><$link  /></li>
> </$list>
> </ul>
> ```
>
> This example uses a lot of shortcuts with TW default values. `<$list 
> filter="[tag[todo]]">` is a shortcut for: `<$list filter="[tag[todo]]" 
> variable="currentTiddler" >`.  `<$link />` is a shortcut for `<$link 
> to=<<currentTiddler>> />`
>
> The HTML output is 
>
> ```
> <ul>
>   <li><a class="tc-tiddlylink tc-tiddlylink-resolves" href="#a">a</a></li>
>   <li><a class="tc-tiddlylink tc-tiddlylink-resolves" href="#b">b</a></li>
> </ul>
> ```
>  
>
>> 2. .... it is frustratingly difficult to output a number of text entries 
>> (filtered out from a db made of data tiddlers) excluding duplicates, and 
>> this because in TW you cannot assign to a 'variable' other than at 
>> declaration time, so you cannot incrementally append your entries to a 
>> 'list' variable for post-processing. 
>>
>
> That's right from a programmers point of view. ... But it will be very 
> elegant, once you understand the mechanism. ... 
> As I wrote TW uses sensible defaults for widget parameters, that's why it 
> is important to have a closer look at the docs. ..
>  
>
>> Acknowledging that TW is not a full-featured programming language, I'm 
>> pretty much sure that it was conceived to enable users to do such kind of 
>> stuff: filter out and manipulate chunks of text;
>>
>
> As I wrote it's built to manipulate text. .. As above it's designed to 
> manipulate the DOM ... May be this view will make it clearer for you.
>  
>
>> 3. filters have if-then-else logic but only to a limited scope. Filters' 
>> if-then-else statements can only output text strings;
>>
>
> Not really, they can also be used with variables eg: 
> `[tag[todo]get<variable>]` or `[tag[todo]get{reference}]`
>
> With the *first* example if you $set variable to eg: `hugo`, it will read 
> the content of the `hugo` field. 
> The *second* example will use the 'text' field of the tiddler 
> 'reference', reads the content of that field and uses this value to read 
> the value of the "todo" tiddler. ... So it's similar to a "pointer".
>
>  
>
>> 4. filters indeed create and deal with lists, so the only place where 
>> hopefully I can do my processing is within a filter, but it is quite 
>> difficult to write a one-liner that does what I want, 
>>
>
> Yes, filters can become complex. So sometimes it is needed to define 
> several variables upfront, that contain "filtered" elements already. ... 
> It's also a bit of the speed advantage, because wikitext is "interpreted", 
> but heavily cached. ... 
>
>  
>
>> let me paste my true code below (I'm sure that a better developer could 
>> write a more elegant, more synthetic one merging some of the <$list> 
>> widgets together into a single one)...
>>
>>
> I'll have a closer look at the code and write a new post ...  
>

-- 
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/46e7f601-370c-4327-92b6-0d3fc2976ba8n%40googlegroups.com.

Reply via email to