This page is part of a static HTML representation of the TiddlyWiki at https://tiddlywiki.com/

Release 5.3.0

 1st July 2023 at 12:34pm

See GitHub for detailed change history of this release

Congratulations to vilc for their winning design for the banner for this release (here is the competition thread).

Overview of v5.3.0

This release introduces a number of significant improvements and new features related to some of TiddlyWiki's most fundamental components: macros, widgets, operators and transclusion. v5.3.0 also contains several other bug fixes and improvements.

Introduction to Parameterised Transclusion, Procedures, Functions and Custom Widgets

added The motivation of these changes is to fix one of TiddlyWiki 5's early design flaws: the reliance on macros using textual substitution as the primary way to modularise and reuse wikitext and filters.

Experience has shown that while macros are a good match for a small number of tasks, they are brittle and error prone for many common operations. See Macro Pitfalls for a discussion of the problems that accompany this approach. Over the years we have introduced mitigations for the worst problems but these have come at a cost of increased complexity.

The changes in this release provide powerful new ways to achieve common tasks, and unlock completely new capabilities that were previously impossible in wikitext.

  • Procedures, which are essentially what macros should have been; they work in exactly the same way except that parameters are exposed as simple variables (without the double underscores) and no textual substitution takes place
  • Custom Widgets, allowing the creation of widgets in wikitext, and the redefinition of built-in widgets
  • Functions, a new way to encapsulate filter expressions with named parameters, including the ability to make custom filter operators
  • Parameterised Transclusions, allowing strings and wikitext trees to be passed to transclusions

The approach taken by this release is to add new functionality by extending and augmenting the system without disturbing existing functionality. All of these changes are thus intended to be backwards compatible. While they represent a new field of opportunities for wikitext authors, it is possible for authors to ignore all these new features and continue to use TiddlyWiki 5 in the way that they have always done.

These changes lay the groundwork for macros and related features to be deprecated (which is the point at which users are advised not to use old features, and instead given clear pointers to the equivalent modern functionality).

Text Substitution Improvements

added The new transclusion architecture is not by itself sufficient to enable us to fully deprecate macros yet. To handle most of the remaining use cases this release adds convenient new ways of using textual substitution without having to create a macro:

Firstly, the new text substitution syntax for widget attributes allows widget attributes to be assigned the value of a string with certain placeholders being replaced by their processed contents. For example:

  • Substitute variable names with the value:
    attr=`Current tiddler is $(currentTiddler)$`
  • Substitute filter expressions with the first value they return:
    attr=```There are ${ [tag[Done]count[]] }$ completed tasks```

Secondly, the new substitute operator allows the same textual substitutions to be performed via a filter operator with the addition of positional parameters that use placeholders of the form $1$, $2$, $3$ etc.

[[https://$1$/$(currentTiddler)$]substitute<domain-name>]

HTTP Requests in WikiText

added new WidgetMessage: tm-http-request for performing HTTP requests in WikiText. This opens up some exciting new opportunities:

  • Integration with Web-based APIs. The documentation includes an example of using the Zotero API to retrieve academic citation data
  • Dynamic content loading: additional tiddlers can be imported dynamically after the main wiki has loaded

Defaulting to Disabling CamelCase Links

updated CamelCase linking is now disabled by default for new wikis. (Note that this documentation wiki has CamelCase linking explicitly enabled because much of the old content was written relying on them).

Plugin Improvements

  • updated Google Analytics plugin to use new GA4 code. Note that the update requires manual configuration to use the new "measurement ID" instead of the old "account ID"
  • extended Dynannotate pugin to support three additional search modes
  • fixed problem with BrowserStorage Plugin unnecessarily saving shadow tiddlers
  • improved BrowserStorage Plugin to request that browser storage be persisted without eviction
  • improved CodeMirror Plugin to add an option to make trailing spaces visible

Translation improvement

Improvements to the following translations:

  • French
  • German
  • Polish
  • Chinese

Usability Improvements

Filter improvements

Hackability Improvements

Bug Fixes

  • fixed importing tiddlers by pasting tiddler data
  • fixed unneeded 14px bottom border for textareas with autoheight enabled
  • fixed crashes when using an invalid CSS selector for WidgetMessage: tm-focus-selector and WidgetMessage: tm-scroll
  • fixed bug whereby scrolling occurs if the linkcatcher widget triggers an action-navigate and the $scroll attribute is set to "no"
  • fixed problem switching between LTR and RTL text
  • fixed bug when the listField attribute of the CheckboxWidget was given the name of a date field (like created or modified)
  • fixed size of buttons in dropdown for editor "link" toolbar button
  • fixed crash when transcluding a lazily loaded tiddler as an attribute value
  • fixed DiffTextWidget crash with missing or empty attributes

Node.js Improvements

Performance Improvements

  • fixed module execution to reuse the same sandbox, saving memory and improving performance

Acknowledgements

@Jermolene would like to thank the contributors to this release who have generously given their time to help improve TiddlyWiki:

  1. @AnthonyMuscio
  2. @Arlen22
  3. @BramChen
  4. @btheado
  5. @buggyj
  6. @carlo-colombo
  7. @cdruan
  8. @donmor
  9. @EvidentlyCube
  10. @flibbles
  11. @GameDungeon
  12. @JoshuaFontany
  13. @kookma
  14. @linonetwo
  15. @Marxsal
  16. @mateuszwilczek
  17. @michsa
  18. @muzimuzhi
  19. @oeyoews
  20. @pmario
  21. @rmunn
  22. @saqimtiaz
  23. @tavin
  24. @twMat
  25. @xcazin
  26. @yaisog
  27. @Zacharia2