Generate list of tiddlers based on a partial field match with variables

80 views
Skip to first unread message

Damon Pritchett

unread,
May 7, 2019, 3:57:50 PM5/7/19
to TiddlyWiki
Hello all,

I'm a newbie when it comes to filters and such so please bear with me. 

I have a TW where the tiddlers are companies and each tiddler has a field called "charterfiled" for when the company was chartered. The format of the charter field is 1864-08-20. I can count how many companies were chartered in the 1860s with the following:

<$count filter="[tag[Company]regexp:charterfiled[^186]sortan[charterfiled]]"/>

What I'm trying to do is to use the select widget to pick the decade I'd like. I wrote the following:

<$select field='primary'>
<option value='charterfiled[^185]'>1850s</option>
<option value='charterfiled[^186]'>1860s</option>
<option value='charterfiled[^187]'>1870s</option>
<option value='charterfiled[^188]'>1880s</option>
</$select>


''year:'' {{!!primary}}
<br>
<$count filter="[tag[Company]regexp:charterfiled
<primary>]"/>

The variable "primary" gets set correctly, but the count returns all of the tiddlers tagged Company and not just the  ones from the 1860s. What am I doing wrong? I've tried many different things in the filter and the count will return 0 or the total number, but never the correct number.

Thanks,

Damon











Mark S.

unread,
May 7, 2019, 4:36:49 PM5/7/19
to TiddlyWiki
Without actually trying it, I can see you've got "charterfiled" in the value of each option. So the filter is seeing

...charterfiled<charterfiled[^185]>...

Try making your options like:

<option value='^185'>1850s</option>

Good luck!

Damon Pritchett

unread,
May 7, 2019, 4:54:21 PM5/7/19
to TiddlyWiki
Hi Mark,

That was my very first go at it and it always returns the total count of all Company tiddlers when there should be only anywhere from 4 to 111 depending on the decade chosen. The total number is well over 1000. I even tried it with the square brackets while setting the value.

That code I pasted was a copy and paste problem while I was in transition. Sorry about that.

Damon

Eric Shulman

unread,
May 7, 2019, 6:31:47 PM5/7/19
to TiddlyWiki
On Tuesday, May 7, 2019 at 12:57:50 PM UTC-7, Damon Pritchett wrote:
The problem is that the "primary" value is being stored in the current tiddler, but when you are referencing it in the filter, it is relative to each matched [tag[Company]] tiddler.

Also, the filter syntax, "<primary>" is references a variable, not a field.  Thus, to actually refer to the selected value stored in the *current* tiddler, try this:

<$select field='primary'>
<option value='^185'>1850s</option>
<option value='^186'>1860s</option>
<option value='^187'>1870s</option>
<option value='^188'>1880s</option>
</$select>

''year:'' {{!!primary}}
<br>
<$vars primary={{!!primary}}>

<$count filter="[tag[Company]regexp:charterfiled
<primary>]"/>
</$vars>

Let me know how it goes...

enjoy,
-e
Eric Shulman
TiddlyTools.com: "Small Tools for Big Ideas!" (tm)
InsideTiddlyWiki: The Missing Manuals 

Mark S.

unread,
May 7, 2019, 6:36:39 PM5/7/19
to TiddlyWiki
I made a mistake, but this code works:

<$select field='primary'>
<option value='^185'>1850s</option>
<option value='^186'>1860s</option>
<option value='^187'>1870s</option>
<option value='^188'>1880s</option>
</$select>


''year:'' {{!!primary}}<br>
<$count filter="[tag[Company]regexp:charterfiled{!!primary}]"/>

HTH

Damon Pritchett

unread,
May 7, 2019, 7:13:25 PM5/7/19
to TiddlyWiki
Thanks to all. I thought I had tried that, but apparently I was changing too many things at once and didn't find the right one.

Damon

Damon Pritchett

unread,
May 8, 2019, 1:36:26 PM5/8/19
to TiddlyWiki
Ok - now for another question. How can I modify this to make it use a variable instead of a field so that the tiddler isn't changed?

Thanks

Damon


On Tuesday, May 7, 2019 at 4:13:25 PM UTC-7, Damon Pritchett wrote:
Thanks to all. I thought I had tried that, but apparently I was changing too many things at once and didn't find the right one.

Damon

On Tuesday, May 7, 2019 at 3:36:39 PM UTC-7, Mark S. wrote:Ok -

Mark S.

unread,
May 8, 2019, 1:48:29 PM5/8/19
to TiddlyWiki
Well, the select widget has to store its results somewhere. However, you can specify some other tiddler in the select widget (e.g. <$select tiddler="SomeOtherTiddler"...> ) 

You would then have to refer to it in your count widget

<$count filter="[tag[Company]regexp:charterfiled{SomeOtherTiddler!!primary}]"/>

Damon Pritchett

unread,
May 8, 2019, 1:58:08 PM5/8/19
to TiddlyWiki
Oh ok. That makes sense. Thanks.

One more question. If I wanted to make it so I can select any given year or a decade, is there a way I can do that without having to type in all of the selections? Such as some kind of loop or similar? Also, I would anticipate that the dropdown would get very large in that case. Is there a way to make a scrollable dropdown?

Thanks again,

Damon

Mark S.

unread,
May 8, 2019, 2:21:02 PM5/8/19
to TiddlyWiki
It's a little more complicated. You can generate like this:

\define regxdate() ^$(prefix)$

<$select field='primary'>
<$list filter="[range[185,188]]" variable="prefix">
<option value=<<regxdate>>><<prefix>>0s</option>
</$list>
</$select>

The macro goes at the top of the tiddler. You can use the "multiple" and "size" options to put the list in its own box. The only problem is that your user could accidentally pick more than one item at a time.
There might be a way to fix that by over-riding the class.

HTH

Damon Pritchett

unread,
May 8, 2019, 3:07:30 PM5/8/19
to TiddlyWiki
Thanks Mark,

That works for the decades. How would I modify that to add the individual years as well as the decades? By the way, I really appreciate the help. I obviously need it.

Damon

Mark S.

unread,
May 8, 2019, 3:32:27 PM5/8/19
to TiddlyWiki
If you don't mind having every single year in your drop-down, then change the range to range[1781,1979] or whatever your years are. Also get rid of "0s" since it's no longer relevant.

Damon Pritchett

unread,
May 8, 2019, 3:51:19 PM5/8/19
to TiddlyWiki
Thank you, sir. You are a gentleman and a scholar, sir.

Damon
Reply all
Reply to author
Forward
0 new messages