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