Highlights not to be missed in 2023

What I do like a lot is the possibility to look up all the “older” versions at TiddlyWiki Archive

The fist TW version in 2023 was v5.2.6 Released 20th March 2023, where you can lookup all the changes that happened.

4 Likes

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.
3 Likes

For me there is no question the winner is the new function definitions. It allows you do a number of things that were either not possible or clumsy.

Output any filter as text, if using a function as a variable

\function display.today() [<now "DDth MMM YYYY">]

<<display.today>>
  • 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;

\function active.todo() [tag[todo]!has[done-date]]

<$list filter="[active.todo[]] +[limit[5]]">

</$list>
  • So here you can forget the details of what makes an active todo and just use [active.todo[]]
  • You may add a new feature such as an archive tag whether it is done or not.
    • \function active.todo() [tag[todo]!has[done-date]!tag[archive]]
  • 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.
4 Likes

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

Now we have Conditional Shortcut Syntax

  • We have a third way to conditionally display content
  • It is less verbose and easy to follow
  • else and elseif are trivial and more logical than the existing method, the emptyMessage or emptyValue.
  • We can now nest and construct sophisticated logical structures, easily and in a way that resemble pseudocode.
  • Such structures can be used in wikitext, transcluded templates, in procedures and even custom widgets.

Although seemingly only a step wise solution I think we will all benefit from easier to read and write wikitext and TiddlyWiki Script.

Example applications include;

  • Simple conditional display
  • Nested conditions without the list widget
  • Other structure like CASE statements
  • Leverage custom filter operators in the if and elseif filters for plan language looking TiddlyWiki script.

I have raised this in relation to filters because if simple logical tests were available this structiure would be even more useful Design Challenge simple AND, OR NOT conditions in filters

1 Like

I forgot to mention two tiny-tiddly-tools by @EricShulman which are so usefull that they should be in TW’s core:

  • Permaview.js gives acces to the permalink - and thus allows you to perform special startup-actions based on this.
  • action-timeout.js allows you to make tw-wait some time… and makes it possible to perform some things which need these milliseconds to work.

And

4 Likes

I’m going to serial edit some links in because this is tricky on mobile!

The reborn, resurrected, rejuvenated relink

@BurningTreeC leading the way on big threads with multi columns

Asciimaths add on to the KaTeX plugin.

The periodic table

@Mohammad rework of mentat

and I’ll have a think! Many thanks to all the people who contribute so much here.

4 Likes

TiddlyWiki 5.3.0+ has brought us some nifty features I like.

  • functions and procedures
  • user defined widgets (custom widgets)
  • conditional shortcut syntax

Among newly introduced plugins

1 Like

Hi @JanJo
I could not find a list of recently published/updated plugins/tools. So, my selection is based on my own usage.

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.

3 Likes

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.

3 Likes

My highlight plugin of 2023 was CodeMirror 6 by @BurningTreeC.

We have numbered lines, autocompletion and it is possible to search / replace in edit-mode.

2 Likes

I just discovered that cm6 supports character count statistics

2 Likes

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.

1 Like
  • Perhaps you could share this some time?

In a related issue @EricShulman

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. :clap: :clap: :clap: :clap:
3 Likes

… 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.

:slight_smile: :+1:

… and also all the other one - thanks!

2 Likes

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.

2 Likes

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.

This tool was in development before 2023, but it really came into my workflow, and became more powerful, this year. I think the latest json package is in this recent thread

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).

2 Likes

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!

5 Likes

The new feature of 2023 that has excited me the most is the jsonset filter operator (I have felt JSON structures could make at least some data-handling use cases easier to manage).

I also like functions and the list-template / list-empty addition to the list-widget very, very much…

1 Like