Dear TiddlyWikians
A year has past since the last years collection of favorites and I would like to continue this tradition which has been invented by @TiddlyTitch 's Best of '21 Collection which presented some innovations for me, that I had missed until then.
So let us continue this and collect our favorites. Please post and link …
your favorite new Plugins
new features (and applications of these)
hacks that make the Tiddly-Life more easy and beautiful
great styles
macros
amazing wikis you discovered and would like to share
I am interested in the gems that I missed this year. Guten Rutsch and a great new year to all of you
Since the community seems to be shy or busy to highlight their favorites this time I will conitnue.
I would like to highlight:
TiddlyPWA by @valpackett as a smart solution for offline storage and cross-device-synchronization - still one of the most necessities for users.
The ability to read qr codes … though I have not implemented this, it is a long desired feature for me an I look forward to using this.
The ability to make http-requests. Again I have not replaced my hand-tailored js solution yet - but it is great to know that this works out of the box now, and makes possible to build plugins using this without reload. Writing this down, I strikes me that I would still need a thread on the needs and possibilities of this but I will come to that later.
You will no longer need to use the $text widget to stop it being treated like a link.
eg; <$text text={{{ [<now "DDth MMM YYYY">] }}}/>
Note how unlike procedures and macros it is evaluated before the final render. This means it can be used as a conditional inside filters without using wikify.
Only the first result is returned, unless you use join. This works like a cascade returning the first value that is non-blank
For example
\function design.mode() [<design-mode>match[yes]] :else[{!!design-mode}match[yes]] :else[{$:/config/design-mode}match[yes]]
`<<design.mode>>` or `[design.mode[]]`
<<design.mode>> or [design.mode[]] will return yes if
The variable design-mode matches yes,
or The current tiddlers design-mode field matches yes
or The config tiddler $:/config/design-mode contains yes
else Otherwise nothing is returned.
You can take any filter an give it a name or include a . in the name and use it as a custom filter operator.
A bit like subfilter variables
This allows you to define reusable filters or filter operators with an appropriate name and bring them together to form a larger filter, whilst keeping it easier to read.
I would like to see this adopted as a de facto standard by us all, including debug, author and other “modes”
Such filter operators can then be used inside the new %if structure
<%if [design.mode[]] %>
Display things only when in design mode
<%endif%>
Notice how it resembles plain language and the complexities of determining design mode is hidden away in a reusable definition.
I think the <%if condition %> will be my next reply.
Finally as we can use custom filter operators we can use them to filter out candidates for a list;
All your lists using [active.todo[]] will now no longer include archive items, without modification.
We may call this a logical abstraction, in a global function.
I won’t detail it here, but given the above, and the power of filters, it is now very easy to write sophisticated reusable filters and achieve a great deal.
At the same time reducing the brain power needed to juggle the details.
As mentioned above I think the new Conditional Shortcut Syntax is also going to be a highlight of 2023. I will explain why, but not how to use it here, I am still learning where it is best used and the pros and cons.
Until now, to do things conditionally we were limited to the widgets $list and $reveal and the use of filtered transclusions {{{ filter }}} which have a limited output.
See above why functions may be better than filtered transclusions
I think that PR Maker for official TW Documentation by @saqimtiaz deserves a mention.
It brings no direct benefit to using TW, but it makes contributing to the documentation much more pleasant, so hopefully we will see more contributions to docs in the future.
IIRC it was easier/possible to create thanks to the already mentioned http request functionality in v5.3.0.
These might not be from 2023, but they are ones that I find myself using the most in 2023.
$:/plugins/telmiger/details by Thomas Elmiger (this is the latest edition to my collection, I’m very happy to add it to my template wiki for future use.)
$:/plugins/benwebber/tag-count by Ben Webber is another favorite that I added this year
$:/plugins/wikilabs/link-to-tabs was one that I added at the end of 2022, and makes finding tiddlers much quicker.
And those are the ones I haven’t seen mentioned that I have been using this year, and would recommend to others.
Other plugins I would recommend that I think many others would would be relink, KARA, and plenty of others that have been said before me.
This was not yet on my radar. Thanks so much, both to you and to @EricShulman — this will come in handy, given how much I use permalinks (automatic student-specific iframes within moodle LMS interface) in teaching.
Eric also showed me how to modify $:/core/modules/info/platform.js to seek the window/target name given to the tab/window in the browser and store it in a new info tiddler $:/info/startup-window-name, I plan to use this to improve the management of external links and wikis.
The Point
Highlights not to be missed in 2023 includes the help @EricShulman has given to many of us.
I am not forgetting the other great contributors, but Eric gets a special mention for stepping in, with solutions no one else could or did, and often explaining it very, very well.
… and I would like to add today’s last-minute-contender camera.js whith which @EricShulman is allowing TW to make use of the camera and thus helps TW to become a swiss-army-knife prepared for all possible usecases.
My top personal highlight of 2023 was learning — with the help of many folks here — how to integrate TiddlyWiki seamlessly with moodle (an open-source LMS, Learning Management System in use at my university).
The solution is discussed in this thread, but the basic idea is that a logged-in student sees an iframe with a permaview url (configured to include custom strings: student ID and name, potentially other metadata). So each student sees info specific to them. (The students never see the permalink url for the iframe, and the tiddler for each student doesn’t actually exist; that would invite students to browse each others’ status in the course. Instead, the permaview drives “missing-tiddler view templates” — a personal dashboard for the student. )
This solution was pretty much hatched out of my own head, but I would not have had the technical chops to see it through without generous help from folks here.
Another key highlight for me is the filter-pill tool by @TW_Tones, which basically offers tiny visually-clear dropdown menus that can be configured however I like. The really fun thing was figuring out how to nest these within <$list> arrays, so I have a powerful compact control panel for my workflow.
In general, I’d like to support ways for @TW_Tones to get some crowd-sourced support for these tools (as well as a good hosted demo site so folks can be sure to be leveraging its latest features).
A third highlight for me is the ongoing amazing set of tools by @Mohammad, constantly evolving in response to requests and ideas. It’s hard to decide which to highlight, so I’ll point out one feature that I suspect is under-appreciated:
The dynamic tables in Shiraz are like an app within an app, from my point of view.
Any user is immediately impressed that the rows are determined by a filter condition, and a tbl-expand toggle enables a peek into each tiddler’s contents. Perhaps you notice that dynamic footer rows allow mathematical summaries and such… And hopefully you notice that the whole dynamic table can be toggled into edit mode, allowing a kind of birds-eye troubleshooting of whatever you can imagine…
But did you know (and here’s where there are relatively more recent features/discoveries for me)…
your column names don’t all have to be hard-coded; some or all can also be determined by filter conditions (including in “missing-tiddler”–oriented view templates)?
dynamic-table columns don’t even have to be actual fields, and you can set up templates to make a column do pretty much anything you can dream up?
your tbl-expand view doesn’t have to be confined to the text field; it can follow cascade conditions to display complex view templates, etc.
The basic tool is not new to 2023. But @Mohammad’s resourcefulness and positive attitude have continued to make a difference to me this year.
As always, whatever I do with TiddlyWiki is standing on the shoulders of generous giants — not only @jeremyruston, but all the folks here who’ve stepped in here to solve problems and demonstrate how things can be done!