actually, the task of parameterizing the code over a whole data tiddler's 
indexes set is not challenging in itself, I already did and pasted above. 
What is challenging, better said: impossible! , is to complete this latter 
chunk of 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>

with a (sub)filter step -possibly stored in a variable- that parameterizes 
it so it can work over the whole set of a dictionary entry's indexes...  
Anyway the subfilter's way is a winner, I'll stick to it.

On Saturday, November 20, 2021 at 3:51:12 PM UTC+2 CarloGgi wrote:

> 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 tiddlywiki+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/tiddlywiki/f8470af2-b30b-4d69-b577-a79bff579b45n%40googlegroups.com.

Reply via email to