+ $genesis>
+ <$genesis $type=<> style="background:white;color:black;padding:4px;">
+
+ <$list filter="[<@params>jsonindexes[]] :filter[prefix[$]] +[limit[1]]" variable="ignore" emptyMessage="""
+
+ <$genesis $type="$transclude" $remappable="no" $names="[<@params>jsonindexes[]]" $values="[<@params>jsonindexes[]] :map[<@params>jsonget]" recursionMarker="no" mode=<>>
+
+ <$slot $name="ts-raw" $depth="2"/>
+ $genesis>
+ """>
+
+ <$genesis $type="$transclude" $remappable="no" $names="[<@params>jsonindexes[]]" $values="[<@params>jsonindexes[]] :map[<@params>jsonget]" $$recursionMarker="no" $$mode=<>>
+
+ <$slot $name="ts-raw" $depth="2"/>
+ $genesis>
+ $list>
+ $genesis>
+ $genesis>
+ $let>
+$parameters>
+\end
diff --git a/core/ui/ViewToolbar/new-here.tid b/core/ui/ViewToolbar/new-here.tid
index 25721f5fd..31e8e4158 100644
--- a/core/ui/ViewToolbar/new-here.tid
+++ b/core/ui/ViewToolbar/new-here.tid
@@ -6,7 +6,7 @@ description: {{$:/language/Buttons/NewHere/Hint}}
\whitespace trim
\define newHereActions()
\whitespace trim
-<$set name="tags" filter="[] [{$:/config/NewTiddler/Tags}]">
+<$set name="tags" filter="[] [enlist{$:/config/NewTiddler/Tags}]">
<$action-sendmessage $message="tm-new-tiddler" tags=<>/>
$set>
\end
diff --git a/core/wiki/config/OfficialPluginLibrary.tid b/core/wiki/config/OfficialPluginLibrary.tid
index cddb5e1fc..20bb13d0d 100644
--- a/core/wiki/config/OfficialPluginLibrary.tid
+++ b/core/wiki/config/OfficialPluginLibrary.tid
@@ -1,6 +1,6 @@
title: $:/config/OfficialPluginLibrary
tags: $:/tags/PluginLibrary
-url: https://tiddlywiki.com/library/v5.2.6/index.html
+url: https://tiddlywiki.com/library/v5.2.8/index.html
caption: {{$:/language/OfficialPluginLibrary}}
{{$:/language/OfficialPluginLibrary/Hint}}
diff --git a/core/wiki/macros/tabs.tid b/core/wiki/macros/tabs.tid
index f439e541d..bc8a0255f 100644
--- a/core/wiki/macros/tabs.tid
+++ b/core/wiki/macros/tabs.tid
@@ -60,4 +60,4 @@ code-body: yes
$let>
$qualify>
-\end
+\end
\ No newline at end of file
diff --git a/editions/de-AT/tiddlers/beispiele/TaskManagement.tid b/editions/de-AT/tiddlers/beispiele/TaskManagement.tid
index 2bc4bd0c0..159676eae 100644
--- a/editions/de-AT/tiddlers/beispiele/TaskManagement.tid
+++ b/editions/de-AT/tiddlers/beispiele/TaskManagement.tid
@@ -1,11 +1,11 @@
created: 20140923173639039
creator: pmario
-modified: 20140924155046340
+modified: 20230307080008193
modifier: pmario
title: TaskManagement
type: text/vnd.tiddlywiki
-In dieser Edition sind folgende Task Management Varianten beschreiben:
+In dieser Edition sind folgende Task Management Varianten beschrieben:
<>
diff --git a/editions/de-AT/tiddlers/beispiele/done.tid b/editions/de-AT/tiddlers/beispiele/done.tid
index 9972856b7..626fa3f33 100644
--- a/editions/de-AT/tiddlers/beispiele/done.tid
+++ b/editions/de-AT/tiddlers/beispiele/done.tid
@@ -2,7 +2,7 @@ color: #37d011
created: 20140923104300415
creator: pmario
icon: $:/core/images/done-button
-modified: 20140923105208878
+modified: 20230307080039831
modifier: ChrisK
tags: done
title: done
@@ -12,5 +12,5 @@ Diese Tag wird verwendet um "Tasks" als erledigt zu markieren.
Siehe auch:
-* [[Task Management]] .. Beispiel
+* [[Task Management|TaskManagement]] .. Beispiel
* [[Tag Manager|$:/TagManager]] .. Zuweisung der Farben und Symbole
\ No newline at end of file
diff --git a/editions/de-AT/tiddlers/howto/Importieren von Tiddlern.tid b/editions/de-AT/tiddlers/howto/Importieren von Tiddlern.tid
new file mode 100644
index 000000000..e9ea480b4
--- /dev/null
+++ b/editions/de-AT/tiddlers/howto/Importieren von Tiddlern.tid
@@ -0,0 +1,6 @@
+created: 20230307080413903
+modified: 20230307080417122
+title: Importieren von Tiddlern
+type: text/vnd.tiddlywiki
+
+https://tiddlywiki.com/#Importing%20Tiddlers
\ No newline at end of file
diff --git a/editions/de-AT/tiddlers/howto/Liste aller HowTo's.tid b/editions/de-AT/tiddlers/howto/Liste aller HowTo's.tid
index 9dcc7e62a..0c88f3e1e 100644
--- a/editions/de-AT/tiddlers/howto/Liste aller HowTo's.tid
+++ b/editions/de-AT/tiddlers/howto/Liste aller HowTo's.tid
@@ -1,11 +1,11 @@
created: 20140918094051245
creator: pmario
-modified: 20140918094948642
+modified: 20230307080301079
modifier: pmario
tags: Referenz
title: Liste aller HowTo's
type: text/vnd.tiddlywiki
-Hier finden Sie eine Auflistung aller HowTo's
+Hier finden Sie eine Auflistung aller ~HowTo's
<>
\ No newline at end of file
diff --git a/editions/de-AT/tiddlers/konzept/Tagging.tid b/editions/de-AT/tiddlers/konzept/Tagging.tid
new file mode 100644
index 000000000..fa28765ba
--- /dev/null
+++ b/editions/de-AT/tiddlers/konzept/Tagging.tid
@@ -0,0 +1,6 @@
+created: 20230307081437974
+modified: 20230307081439303
+title: Tagging
+type: text/vnd.tiddlywiki
+
+https://tiddlywiki.com/#Tagging
\ No newline at end of file
diff --git a/editions/de-AT/tiddlers/system/$__themes_tiddlywiki_vanilla_options_sidebarlayout.tid b/editions/de-AT/tiddlers/system/$__themes_tiddlywiki_vanilla_options_sidebarlayout.tid
new file mode 100644
index 000000000..66a4cbad8
--- /dev/null
+++ b/editions/de-AT/tiddlers/system/$__themes_tiddlywiki_vanilla_options_sidebarlayout.tid
@@ -0,0 +1,6 @@
+created: 20230307080103029
+modified: 20230307080103029
+title: $:/themes/tiddlywiki/vanilla/options/sidebarlayout
+type: text/vnd.tiddlywiki
+
+fluid-fixed
\ No newline at end of file
diff --git a/editions/de-AT/tiddlers/widgets/ListWidget.tid b/editions/de-AT/tiddlers/widgets/ListWidget.tid
new file mode 100644
index 000000000..44430e62c
--- /dev/null
+++ b/editions/de-AT/tiddlers/widgets/ListWidget.tid
@@ -0,0 +1,7 @@
+created: 20230307081923415
+modified: 20230307081953759
+tags: Widgets
+title: ListWidget
+type: text/vnd.tiddlywiki
+
+https://tiddlywiki.com/#ListWidget
\ No newline at end of file
diff --git a/editions/de-AT/tiddlers/widgets/TranscludeWidget.tid b/editions/de-AT/tiddlers/widgets/TranscludeWidget.tid
new file mode 100644
index 000000000..e2e0cbdaf
--- /dev/null
+++ b/editions/de-AT/tiddlers/widgets/TranscludeWidget.tid
@@ -0,0 +1,7 @@
+created: 20230307082002353
+modified: 20230307082023207
+tags: Widgets
+title: TranscludeWidget
+type: text/vnd.tiddlywiki
+
+https://tiddlywiki.com/#TranscludeWidget
\ No newline at end of file
diff --git a/editions/de-AT/tiddlers/wikitext/Bilder in WikiText.tid b/editions/de-AT/tiddlers/wikitext/Bilder in WikiText.tid
index 1a2407ad8..53ffd37d1 100644
--- a/editions/de-AT/tiddlers/wikitext/Bilder in WikiText.tid
+++ b/editions/de-AT/tiddlers/wikitext/Bilder in WikiText.tid
@@ -1,7 +1,7 @@
caption: Bilder
created: 20131205160221762
creator: pmario
-modified: 20140921170652909
+modified: 20230307081713229
modifier: pmario
tags: WikiText
title: Bilder in WikiText
@@ -25,7 +25,7 @@ oder
Wenn die Bildquelle der Titel eines existierenden Tiddlers ist, dann wird dieser direkt angezeigt. Ansonsten wird die Quelle als URL angesehen und ein HTML `` Element wird erzeugt. Das `src` Attribut wird auf die [[URL]] gesetzt.
-Ein [[Tooltip]] kann ebenfalls angegeben werden:
+Ein Tooltip kann ebenfalls angegeben werden:
```
[img[Ich bin der Tooltip text|Motovun Jack.jpg]]
@@ -33,7 +33,7 @@ Ein [[Tooltip]] kann ebenfalls angegeben werden:
[img width=100 [Ich bin der Tooltip text|Motovun Jack.jpg]]
-Attribute wie zB: CSS Klassen oder die Höhe und Breite können ebenfalls angegeben werden.
+Attribute wie z.B: CSS Klassen oder die Höhe und Breite können ebenfalls angegeben werden.
```
[img width=64 [Motovun Jack.jpg]]
diff --git a/editions/de-AT/tiddlers/wikitext/Makros in WikiText.tid b/editions/de-AT/tiddlers/wikitext/Makros in WikiText.tid
index dd336588e..c2141999a 100644
--- a/editions/de-AT/tiddlers/wikitext/Makros in WikiText.tid
+++ b/editions/de-AT/tiddlers/wikitext/Makros in WikiText.tid
@@ -1,7 +1,7 @@
caption: Makros
created: 20131205160746466
creator: pmario
-modified: 20140922124415476
+modified: 20230307080132949
modifier: ChrisK
tags: WikiText
title: Makros in WikiText
@@ -15,7 +15,7 @@ Hallo, Ich bin $name$ und lebe in $adresse$
Hallo, Ich bin $name$ und würde gerne mal wieder nach $adresse$ fahren:)
\end
-!! Makros Definieren
+!! Makros definieren
!!! Für die Ungeduldigen
@@ -76,7 +76,7 @@ Für einzeilige Makros kann die `\end` Markierung entfallen!
* Makros können mit dem ImportVariablesWidget importiert werden. (Für geübte Anwender)
-!! Makros Verwenden
+!! Makros verwenden
```
<>
diff --git a/editions/de-AT/tiddlers/wikitext/Transclusion in WikiText.tid b/editions/de-AT/tiddlers/wikitext/Transclusion in WikiText.tid
new file mode 100644
index 000000000..bb8798ebf
--- /dev/null
+++ b/editions/de-AT/tiddlers/wikitext/Transclusion in WikiText.tid
@@ -0,0 +1,7 @@
+created: 20230307081757660
+modified: 20230307081814992
+tags: WikiText
+title: Transclusion in WikiText
+type: text/vnd.tiddlywiki
+
+https://tiddlywiki.com/#Transclusion%20in%20WikiText
\ No newline at end of file
diff --git a/editions/prerelease/tiddlers/$__StoryList.tid b/editions/prerelease/tiddlers/$__StoryList.tid
deleted file mode 100644
index d1a1e959f..000000000
--- a/editions/prerelease/tiddlers/$__StoryList.tid
+++ /dev/null
@@ -1,5 +0,0 @@
-created: 20201222190149806
-list: [[Release 5.1.23]]
-modified: 20201222190149806
-title: $:/StoryList
-type: text/vnd.tiddlywiki
\ No newline at end of file
diff --git a/editions/prerelease/tiddlers/Release 5.3.0.tid b/editions/prerelease/tiddlers/Release 5.3.0.tid
new file mode 100644
index 000000000..63a57cd4d
--- /dev/null
+++ b/editions/prerelease/tiddlers/Release 5.3.0.tid
@@ -0,0 +1,83 @@
+caption: 5.3.0
+created: 20230419103154368
+modified: 20230419103154368
+tags: ReleaseNotes
+title: Release 5.3.0
+type: text/vnd.tiddlywiki
+
+//[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/master...parameterised-transclusions]]//
+
+! About v5.3.0
+
+This pre-release introduces a number of significant improvements and new features related to some of TiddlyWiki's most fundamental components: macros, widgets, operators and transclusion.
+
+! Introduction to v5.3.0
+
+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|Transclusion]], 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).
+
+The new transclusion architecture is not by itself sufficient to enable us to fully deprecate macros yet. To handle the remaining use cases we propose a new backtick quoted attribute format that allows for the substitution of variable values. See https://github.com/Jermolene/TiddlyWiki5/issues/6663 for details.
+
+! Plugin Improvements
+
+*
+
+! Translation improvement
+
+Improvements to the following translations:
+
+*
+
+! Accessibility Improvements
+
+*
+
+! Usability Improvements
+
+*
+
+! Widget Improvements
+
+*
+
+! Filter improvements
+
+*
+
+! Hackability Improvements
+
+*
+
+! Bug Fixes
+
+*
+
+! Developer Improvements
+
+*
+
+! Node.js Improvements
+
+*
+
+! Performance Improvements
+
+*
+! Acknowledgements
+
+[[@Jermolene|https://github.com/Jermolene]] would like to thank the contributors to this release who have generously given their time to help improve TiddlyWiki:
+
+<<.contributors """
+""">>
diff --git a/editions/prerelease/tiddlers/system/PrereleaseOfficialPluginLibrary.tid b/editions/prerelease/tiddlers/system/PrereleaseOfficialPluginLibrary.tid
index b9ffb0fce..510d876d0 100644
--- a/editions/prerelease/tiddlers/system/PrereleaseOfficialPluginLibrary.tid
+++ b/editions/prerelease/tiddlers/system/PrereleaseOfficialPluginLibrary.tid
@@ -1,6 +1,6 @@
title: $:/config/OfficialPluginLibrary
tags: $:/tags/PluginLibrary
-url: https://tiddlywiki.com/prerelease/library/v5.2.6/index.html
+url: https://tiddlywiki.com/prerelease/library/v5.2.8/index.html
caption: {{$:/language/OfficialPluginLibrary}} (Prerelease)
The prerelease version of the official ~TiddlyWiki plugin library at tiddlywiki.com. Plugins, themes and language packs are maintained by the core team.
diff --git a/editions/server-external-js/tiddlers/config/$__DefaultTiddlers.tid b/editions/server-external-js/tiddlers/config/$__DefaultTiddlers.tid
new file mode 100644
index 000000000..a1f1a0a27
--- /dev/null
+++ b/editions/server-external-js/tiddlers/config/$__DefaultTiddlers.tid
@@ -0,0 +1,7 @@
+created: 20230314153132081
+modified: 20230314153243008
+title: $:/DefaultTiddlers
+type: text/vnd.tiddlywiki
+
+GettingStarted
+[[Using the external JavaScript template]]
diff --git a/editions/server-external-js/tiddlers/config/$__config_SaveWikiButton_Filename.tid b/editions/server-external-js/tiddlers/config/$__config_SaveWikiButton_Filename.tid
new file mode 100644
index 000000000..071c85fe9
--- /dev/null
+++ b/editions/server-external-js/tiddlers/config/$__config_SaveWikiButton_Filename.tid
@@ -0,0 +1,4 @@
+title: $:/config/SaveWikiButton/Filename
+type: text/vnd.tiddlywiki
+
+external-<>.html
\ No newline at end of file
diff --git a/editions/server-external-js/tiddlers/external/tiddlywiki.files b/editions/server-external-js/tiddlers/external/tiddlywiki.files
new file mode 100644
index 000000000..73474d2ce
--- /dev/null
+++ b/editions/server-external-js/tiddlers/external/tiddlywiki.files
@@ -0,0 +1,8 @@
+{
+ "tiddlers": [
+ {
+ "file": "../../../tw5.com/tiddlers/webserver/Using the external JavaScript template.tid",
+ "isTiddlerFile": true
+ }
+ ]
+}
\ No newline at end of file
diff --git a/editions/server-external-js/tiddlywiki.info b/editions/server-external-js/tiddlywiki.info
index b8d4c37ee..cb02accd5 100644
--- a/editions/server-external-js/tiddlywiki.info
+++ b/editions/server-external-js/tiddlywiki.info
@@ -2,8 +2,7 @@
"description": "Client-server edition with external tiddlywiki.js",
"plugins": [
"tiddlywiki/tiddlyweb",
- "tiddlywiki/filesystem",
- "tiddlywiki/highlight"
+ "tiddlywiki/filesystem"
],
"themes": [
"tiddlywiki/vanilla",
@@ -13,7 +12,7 @@
"listen": [
"--listen","root-tiddler=$:/core/save/all-external-js","use-browser-cache=yes"],
"index": [
- "--render","$:/core/save/offline-external-js","index.html","text/plain",
+ "--render","$:/core/save/offline-external-js","[[external-]addsuffixaddsuffix[.html]]","text/plain",
"--render","$:/core/templates/tiddlywiki5.js","[[tiddlywikicore-]addsuffixaddsuffix[.js]]","text/plain"],
"static": [
"--render","$:/core/templates/static.template.html","static.html","text/plain",
diff --git a/editions/test/tiddlers/tests/data/custom-operators/NestedParameterised.tid b/editions/test/tiddlers/tests/data/custom-operators/NestedParameterised.tid
new file mode 100644
index 000000000..3e4d610d0
--- /dev/null
+++ b/editions/test/tiddlers/tests/data/custom-operators/NestedParameterised.tid
@@ -0,0 +1,24 @@
+title: CustomOperators/NestedParameterised
+description: Nested parameterised custom operator usage
+type: text/vnd.tiddlywiki-multiple
+tags: [[$:/tags/wiki-test-spec]]
+
+title: Output
+
+\whitespace trim
+\function .dividebysomething(first:ignored,factor:0.5)
+[divide[2]multiply]
+\end
+
+\function .multiplebysomething(first:ignored,factor:2)
+[multiply[2].dividebysomething[],]
+\end
+
+<$text text={{{ [[123].multiplebysomething[]] }}}/>
+-
+<$text text={{{ [[123].multiplebysomething[x],[4]] }}}/>
+
++
+title: ExpectedResult
+
+
\ No newline at end of file
diff --git a/editions/test/tiddlers/tests/data/custom-operators/Simple.tid b/editions/test/tiddlers/tests/data/custom-operators/Simple.tid
new file mode 100644
index 000000000..089701295
--- /dev/null
+++ b/editions/test/tiddlers/tests/data/custom-operators/Simple.tid
@@ -0,0 +1,21 @@
+title: CustomOperators/Simple
+description: Simple custom operator usage
+type: text/vnd.tiddlywiki-multiple
+tags: [[$:/tags/wiki-test-spec]]
+
+title: Output
+
+\whitespace trim
+
+\function .multiplybytwo()
+[multiply[2]]
+\end
+
+<$text text={{{ [[123].multiplybytwo[]] }}}/>
+|
+<$text text={{{ [[123]function[.multiplybytwo]] }}}/>
+
++
+title: ExpectedResult
+
+
246|246
\ No newline at end of file
diff --git a/editions/test/tiddlers/tests/data/filters/DiffMergePatch1.tid b/editions/test/tiddlers/tests/data/filters/DiffMergePatch1.tid
new file mode 100644
index 000000000..e6e519df5
--- /dev/null
+++ b/editions/test/tiddlers/tests/data/filters/DiffMergePatch1.tid
@@ -0,0 +1,28 @@
+title: Filters/DiffMergePatch1
+description: Tests for diff-merge-patch derived operators
+type: text/vnd.tiddlywiki-multiple
+tags: [[$:/tags/wiki-test-spec]]
+
+title: Output
+
+\whitespace trim
+\define text1()
+the cat sat on the mat
+\end
+
+\define text2()
+the hat saw in every category
+\end
+
+<$text text={{{ [makepatches] }}}/>
++
+title: ExpectedResult
+
+
@@ -1,22 +1,29 @@
+ the
+-c
++h
+ at sa
+-t on the mat
++w in every category
+
\ No newline at end of file
diff --git a/editions/test/tiddlers/tests/data/filters/DiffMergePatch2.tid b/editions/test/tiddlers/tests/data/filters/DiffMergePatch2.tid
new file mode 100644
index 000000000..1fa355573
--- /dev/null
+++ b/editions/test/tiddlers/tests/data/filters/DiffMergePatch2.tid
@@ -0,0 +1,25 @@
+title: Filters/DiffMergePatch2
+description: Tests for diff-merge-patch derived operators
+type: text/vnd.tiddlywiki-multiple
+tags: [[$:/tags/wiki-test-spec]]
+
+title: Output
+
+\whitespace trim
+\define text1()
+the cat sat on the mat
+\end
+
+\define text2()
+the hat saw in every category
+\end
+
+<$let patches={{{ [makepatches] }}}>
+
+<$text text={{{ [applypatches] }}}/>
+
+$let>
++
+title: ExpectedResult
+
+the hat saw in every category
\ No newline at end of file
diff --git a/editions/test/tiddlers/tests/data/filters/DiffMergePatch3.tid b/editions/test/tiddlers/tests/data/filters/DiffMergePatch3.tid
new file mode 100644
index 000000000..87d98e890
--- /dev/null
+++ b/editions/test/tiddlers/tests/data/filters/DiffMergePatch3.tid
@@ -0,0 +1,22 @@
+title: Filters/DiffMergePatch3
+description: Tests for diff-merge-patch derived operators
+type: text/vnd.tiddlywiki-multiple
+tags: [[$:/tags/wiki-test-spec]]
+
+title: Output
+
+\whitespace trim
+\define text1()
+the cat sat on the mat
+\end
+
+\define patches()
+**NOT A VALID PATCH**
+\end
+
+<$text text={{{ [applypatches] }}}/>
+
++
+title: ExpectedResult
+
+the cat sat on the mat
\ No newline at end of file
diff --git a/editions/test/tiddlers/tests/data/functions/FunctionAttributes.tid b/editions/test/tiddlers/tests/data/functions/FunctionAttributes.tid
new file mode 100644
index 000000000..2deb49bdc
--- /dev/null
+++ b/editions/test/tiddlers/tests/data/functions/FunctionAttributes.tid
@@ -0,0 +1,24 @@
+title: Functions/FunctionAttributes
+description: Attributes specified as function invocations
+type: text/vnd.tiddlywiki-multiple
+tags: [[$:/tags/wiki-test-spec]]
+
+title: Output
+
+\whitespace trim
+\function .dividebysomething(factor:0.5)
+[divide]
+\end
+
+\function multiplebysomething(first:ignored,factor:2)
+[multiply[2].dividebysomething[0.25]]
+\end
+
+<$text text=<>/>
+|
+<$text text=<>/>
+
++
+title: ExpectedResult
+
+
16|32
\ No newline at end of file
diff --git a/editions/test/tiddlers/tests/data/functions/FunctionOperator.tid b/editions/test/tiddlers/tests/data/functions/FunctionOperator.tid
new file mode 100644
index 000000000..e2a0038dc
--- /dev/null
+++ b/editions/test/tiddlers/tests/data/functions/FunctionOperator.tid
@@ -0,0 +1,24 @@
+title: Functions/FunctionOperator
+description: Calling a function via the function operator
+type: text/vnd.tiddlywiki-multiple
+tags: [[$:/tags/wiki-test-spec]]
+
+title: Output
+
+\whitespace trim
+\function .dividebysomething(factor:0.5)
+[divide]
+\end
+
+\function multiplebysomething(first:ignored,factor:2)
+[multiplymultiply[2].dividebysomething[0.25]]
+\end
+
+<$text text={{{ [[4]function[multiplebysomething]] }}}/>
+|
+<$text text={{{ [[6]function[multiplebysomething],[ignored],[4]] }}}/>
+
++
+title: ExpectedResult
+
+
64|192
\ No newline at end of file
diff --git a/editions/test/tiddlers/tests/data/functions/MissingFunction.tid b/editions/test/tiddlers/tests/data/functions/MissingFunction.tid
new file mode 100644
index 000000000..25498e452
--- /dev/null
+++ b/editions/test/tiddlers/tests/data/functions/MissingFunction.tid
@@ -0,0 +1,15 @@
+title: Functions/MissingFunction
+description: Calling a missing function via the function operator
+type: text/vnd.tiddlywiki-multiple
+tags: [[$:/tags/wiki-test-spec]]
+
+title: Output
+
+\whitespace trim
+
+<$text text={{{ [[23]function[missing]] }}}/>
+
++
+title: ExpectedResult
+
+23
\ No newline at end of file
diff --git a/editions/test/tiddlers/tests/data/functions/RunawayRecursiveFunctions.tid b/editions/test/tiddlers/tests/data/functions/RunawayRecursiveFunctions.tid
new file mode 100644
index 000000000..81be22f16
--- /dev/null
+++ b/editions/test/tiddlers/tests/data/functions/RunawayRecursiveFunctions.tid
@@ -0,0 +1,18 @@
+title: Functions/RunawayRecursiveFunctions
+description: Runaway recursive functions
+type: text/vnd.tiddlywiki-multiple
+tags: [[$:/tags/wiki-test-spec]]
+
+title: Output
+
+\whitespace trim
+\function .buffalo(p)
+[.buffalo
]
+\end
+
+<$text text=<<.buffalo 8>>/>
+
++
+title: ExpectedResult
+
+/**-- Excessive filter recursion --**/
\ No newline at end of file
diff --git a/editions/test/tiddlers/tests/data/functions/UndefinedParameters.tid b/editions/test/tiddlers/tests/data/functions/UndefinedParameters.tid
new file mode 100644
index 000000000..8a2b0a91a
--- /dev/null
+++ b/editions/test/tiddlers/tests/data/functions/UndefinedParameters.tid
@@ -0,0 +1,22 @@
+title: Functions/UndefinedParameters
+description: Undefined function parameters
+type: text/vnd.tiddlywiki-multiple
+tags: [[$:/tags/wiki-test-spec]]
+
+title: Output
+
+\function greet(who)
+[[hello ]addsuffix]
+\end
+
+<$text text={{{[function[greet],[world]]}}}/>
+
+<>
+
+<$text text={{{[function[greet]]}}}/>
+
+<>
++
+title: ExpectedResult
+
+hello world
hello world
hello
hello
\ No newline at end of file
diff --git a/editions/test/tiddlers/tests/data/functions/WikifiedFunctions.tid b/editions/test/tiddlers/tests/data/functions/WikifiedFunctions.tid
new file mode 100644
index 000000000..733fbdaef
--- /dev/null
+++ b/editions/test/tiddlers/tests/data/functions/WikifiedFunctions.tid
@@ -0,0 +1,36 @@
+title: Functions/WikifiedFunctions
+description: Wikified functions
+type: text/vnd.tiddlywiki-multiple
+tags: [[$:/tags/wiki-test-spec]]
+
+title: Output
+
+\whitespace trim
+\function fn-buffalo(param)
+[addsuffix[ with a ''buffalo'']]
+\end
+
+\procedure proc-buffalo(param)
+<> with a ''buffalo''
+\end
+
+\define macro-buffalo(param)
+$param$ with a ''buffalo''
+\end
+
+<>
+
+<>
+
+<>
+
+<$transclude $variable="fn-buffalo" param="Going to lunch" $output="text/plain"/>
+
+<$transclude $variable="proc-buffalo" param="Going to breakfast" $output="text/plain"/>
+
+<$transclude $variable="macro-buffalo" param="Going to dinner" $output="text/plain"/>
+
++
+title: ExpectedResult
+
+
Going to lunch with a ''buffalo''
Going to breakfastwith abuffalo
Going to dinner with a buffalo
Going to lunch with a buffalo with a buffaloGoing to dinner with a buffalo
\ No newline at end of file
diff --git a/editions/test/tiddlers/tests/data/genesis-widget/RedefineLet.tid b/editions/test/tiddlers/tests/data/genesis-widget/RedefineLet.tid
new file mode 100644
index 000000000..f6834998d
--- /dev/null
+++ b/editions/test/tiddlers/tests/data/genesis-widget/RedefineLet.tid
@@ -0,0 +1,31 @@
+title: Genesis/RedefineLet
+description: Using the genesis widget to override the let widget
+type: text/vnd.tiddlywiki-multiple
+tags: [[$:/tags/wiki-test-spec]]
+
+title: Output
+
+\whitespace trim
+\widget $let()
+\whitespace trim
+<$parameters $params="@params">
+<$setmultiplevariables $names="[<@params>jsonindexes[]]" $values="[<@params>jsonindexes[]] :map[<@params>jsongetaddprefix[--]addsuffix[--]]">
+<$slot $name="ts-raw"/>
+$setmultiplevariables>
+$parameters>
+\end
+<$let
+ one="Elephant"
+ $two="Kangaroo"
+ $$three="Giraffe"
+>
+(<$text text=<>/>)
+(<$text text=<<$two>>/>)
+(<$text text=<<$$three>>/>)
+$let>
++
+title: ExpectedResult
+
+
(--Elephant--)
+(--Kangaroo--)
+(--Giraffe--)
\ No newline at end of file
diff --git a/editions/test/tiddlers/tests/data/macros/TrailingNewlines.tid b/editions/test/tiddlers/tests/data/macros/TrailingNewlines.tid
new file mode 100644
index 000000000..18037fac2
--- /dev/null
+++ b/editions/test/tiddlers/tests/data/macros/TrailingNewlines.tid
@@ -0,0 +1,22 @@
+title: Macros/TrailingNewlines
+description: Trailing newlines in macros must not be dropped
+type: text/vnd.tiddlywiki-multiple
+tags: [[$:/tags/wiki-test-spec]]
+
+title: Output
+
+\define inner()
+Paragraph 1
+
+Paragraph 2
+\end
+\define outer()
+<$macrocall $name=inner />
+
+\end
+<>
+
++
+title: ExpectedResult
+
+
Paragraph 1
Paragraph 2
\ No newline at end of file
diff --git a/editions/test/tiddlers/tests/data/procedures/Nested.tid b/editions/test/tiddlers/tests/data/procedures/Nested.tid
new file mode 100644
index 000000000..f63c634af
--- /dev/null
+++ b/editions/test/tiddlers/tests/data/procedures/Nested.tid
@@ -0,0 +1,20 @@
+title: Procedures/Nested
+description: Nested Procedures
+type: text/vnd.tiddlywiki-multiple
+tags: [[$:/tags/wiki-test-spec]]
+
+title: Output
+
+\whitespace trim
+\procedure alpha(x)
+\procedure beta(y)
+<$text text=<>/>
+\end beta
+<$transclude $variable="beta" y={{{ [addprefix] }}}/>
+\end alpha
+
+<>
++
+title: ExpectedResult
+
+
ElephantElephant
\ No newline at end of file
diff --git a/editions/test/tiddlers/tests/data/transclude/CustomWidget-ActionWidget.tid b/editions/test/tiddlers/tests/data/transclude/CustomWidget-ActionWidget.tid
new file mode 100644
index 000000000..0be77a9a3
--- /dev/null
+++ b/editions/test/tiddlers/tests/data/transclude/CustomWidget-ActionWidget.tid
@@ -0,0 +1,27 @@
+title: Transclude/CustomWidget/ActionWidget
+description: Custom widget definition
+type: text/vnd.tiddlywiki-multiple
+tags: [[$:/tags/wiki-test-spec]]
+
+title: Output
+
+\whitespace trim
+<$transclude $tiddler='Result'>
+$transclude>
++
+title: Actions
+
+\whitespace trim
+
+\widget $$action-mywidget(one:'Jaguar')
+\whitespace trim
+<$action-setfield $tiddler="Result" $field="text" $value=<>/>
+\end
+
+<$$action-mywidget one="Dingo">
+ Crocodile
+$$action-mywidget>
++
+title: ExpectedResult
+
+
Dingo
\ No newline at end of file
diff --git a/editions/test/tiddlers/tests/data/transclude/CustomWidget-Fail.tid b/editions/test/tiddlers/tests/data/transclude/CustomWidget-Fail.tid
new file mode 100644
index 000000000..3d0759013
--- /dev/null
+++ b/editions/test/tiddlers/tests/data/transclude/CustomWidget-Fail.tid
@@ -0,0 +1,26 @@
+title: Transclude/CustomWidget/Fail
+description: Custom widget failed definition
+type: text/vnd.tiddlywiki-multiple
+tags: [[$:/tags/wiki-test-spec]]
+
+title: Output
+
+\whitespace trim
+
+\widget $non-existent-widget(one:'Jaguar')
+\whitespace trim
+<$text text=<>/>
+<$slot $name="ts-raw">
+ Whale
+$slot>
+\end
+<$non-existent-widget one="Dingo">
+ Crocodile
+$non-existent-widget>
+<$non-existent-widget one="BumbleBee">
+ Squirrel
+$non-existent-widget>
++
+title: ExpectedResult
+
+
!! ''Testimonials & Reviews''
diff --git a/editions/tw5.com/tiddlers/hellothere/quickstart/Quick Start.tid b/editions/tw5.com/tiddlers/hellothere/quickstart/Quick Start.tid
new file mode 100644
index 000000000..ff7bec946
--- /dev/null
+++ b/editions/tw5.com/tiddlers/hellothere/quickstart/Quick Start.tid
@@ -0,0 +1,2 @@
+title: Quick Start
+list: [[Quick Start: Tiddlyhost]] [[Quick Start: Desktop]] [[Quick Start: DIY]] [[Quick Start: Xememex]]
\ No newline at end of file
diff --git a/editions/tw5.com/tiddlers/hellothere/quickstart/desktop.tid b/editions/tw5.com/tiddlers/hellothere/quickstart/desktop.tid
new file mode 100644
index 000000000..c20fa52de
--- /dev/null
+++ b/editions/tw5.com/tiddlers/hellothere/quickstart/desktop.tid
@@ -0,0 +1,10 @@
+title: Quick Start: Desktop
+tags: [[Quick Start]]
+caption: Desktop
+icon: $:/core/images/storyview-zoomin
+button-color: #37753e
+button-text: Download
+background: linear-gradient(90deg,#f0fff1, #ffffff)
+link: TiddlyDesktop
+
+Download the official desktop application for macOS, Windows and Linux
\ No newline at end of file
diff --git a/editions/tw5.com/tiddlers/hellothere/quickstart/diy.tid b/editions/tw5.com/tiddlers/hellothere/quickstart/diy.tid
new file mode 100644
index 000000000..c71bfca27
--- /dev/null
+++ b/editions/tw5.com/tiddlers/hellothere/quickstart/diy.tid
@@ -0,0 +1,10 @@
+title: Quick Start: DIY
+tags: [[Quick Start]]
+caption: DIY
+icon: $:/core/images/theme-button
+button-color: #ff4522
+button-text: Explore
+background: linear-gradient(90deg,#fff4f2, #ffffff)
+link: GettingStarted
+
+Find the configuration that is right for you to get the full benefits of ~TiddlyWiki
\ No newline at end of file
diff --git a/editions/tw5.com/tiddlers/hellothere/quickstart/tiddlyhost.tid b/editions/tw5.com/tiddlers/hellothere/quickstart/tiddlyhost.tid
new file mode 100644
index 000000000..75f4184fa
--- /dev/null
+++ b/editions/tw5.com/tiddlers/hellothere/quickstart/tiddlyhost.tid
@@ -0,0 +1,10 @@
+title: Quick Start: Tiddlyhost
+tags: [[Quick Start]]
+caption: Tiddlyhost
+icon: $:/core/images/globe
+button-color: #00009a
+button-text: Create Account
+background: linear-gradient(90deg,#f5f5ff, #ffffff)
+link: Tiddlyhost
+
+The easiest way to get started with an online ~TiddlyWiki
\ No newline at end of file
diff --git a/editions/tw5.com/tiddlers/hellothere/quickstart/xememex.tid b/editions/tw5.com/tiddlers/hellothere/quickstart/xememex.tid
new file mode 100644
index 000000000..7fb562083
--- /dev/null
+++ b/editions/tw5.com/tiddlers/hellothere/quickstart/xememex.tid
@@ -0,0 +1,10 @@
+title: Quick Start: Xememex
+tags: [[Quick Start]]
+caption: Xememex
+icon: $:/core/images/star-filled
+button-color: #bf5fb6
+button-text: Find out more
+background: linear-gradient(90deg,#fff1fe, #ffffff)
+link: Xememex
+
+For companies and teams, a multiuser ~TiddlyWiki from Federatial
\ No newline at end of file
diff --git a/editions/tw5.com/tiddlers/howtos/Formatting List Results as Tables with CSS - Specified Columns Methods.tid b/editions/tw5.com/tiddlers/howtos/Formatting List Results as Tables with CSS - Specified Columns Methods.tid
index 817776a1a..853f868a0 100644
--- a/editions/tw5.com/tiddlers/howtos/Formatting List Results as Tables with CSS - Specified Columns Methods.tid
+++ b/editions/tw5.com/tiddlers/howtos/Formatting List Results as Tables with CSS - Specified Columns Methods.tid
@@ -33,29 +33,17 @@ Note the various places you need to indicate the number of columns
```
@@.fourcolumns
-<$list filter="[tag[Filter Operators]]" variable="foo">
-<>
+<$list filter="[tag[Filter Operators]]" variable="foo">
+<>
$list>
@@
```
!! Example showing partial list of filter operators
-
-
-
@@.fourcolumns
-<$list filter="[tag[Filter Operators]limit[24]]" variable="foo">
-<>
+<$list filter="[tag[Filter Operators]limit[24]]" variable="foo">
+<>
$list>
@@
+
diff --git a/editions/tw5.com/tiddlers/howtos/Visible Transclusions.tid b/editions/tw5.com/tiddlers/howtos/Visible Transclusions.tid
new file mode 100644
index 000000000..e3f46440e
--- /dev/null
+++ b/editions/tw5.com/tiddlers/howtos/Visible Transclusions.tid
@@ -0,0 +1,14 @@
+created: 20220909111836951
+modified: 20230419103154329
+tags: Learning
+title: Visible Transclusions
+type: text/vnd.tiddlywiki
+
+!! Visible Transclusions
+
+Block transclusions are shown in red, and inline transclusions are shown in green.
+
+<$button>
+<$action-setfield $tiddler="$:/temp/VisibleTransclusions" tags="$:/tags/Macro/View/Body" text={{$:/core/ui/VisibleTransclude}}/>
+Click here to make transclusions visible within story river tiddlers
+$button>
diff --git a/editions/tw5.com/tiddlers/images/New Release Banner.png b/editions/tw5.com/tiddlers/images/New Release Banner.png
index 6cacb3e3d..b75c8fc19 100644
Binary files a/editions/tw5.com/tiddlers/images/New Release Banner.png and b/editions/tw5.com/tiddlers/images/New Release Banner.png differ
diff --git a/editions/tw5.com/tiddlers/images/Open Collective Logo.tid b/editions/tw5.com/tiddlers/images/Open Collective Logo.tid
new file mode 100644
index 000000000..25e91161a
--- /dev/null
+++ b/editions/tw5.com/tiddlers/images/Open Collective Logo.tid
@@ -0,0 +1,4 @@
+title: Open Collective Logo
+tags: picture
+
+
\ No newline at end of file
diff --git a/editions/tw5.com/tiddlers/images/Reddit Logo.tid b/editions/tw5.com/tiddlers/images/Reddit Logo.tid
new file mode 100644
index 000000000..76bb6bf7c
--- /dev/null
+++ b/editions/tw5.com/tiddlers/images/Reddit Logo.tid
@@ -0,0 +1,7 @@
+title: Reddit Logo
+
+
diff --git a/editions/tw5.com/tiddlers/images/Tiddlyhost Logo.png b/editions/tw5.com/tiddlers/images/Tiddlyhost Logo.png
new file mode 100644
index 000000000..f39ac2892
Binary files /dev/null and b/editions/tw5.com/tiddlers/images/Tiddlyhost Logo.png differ
diff --git a/editions/tw5.com/tiddlers/images/Tiddlyhost Logo.png.meta b/editions/tw5.com/tiddlers/images/Tiddlyhost Logo.png.meta
new file mode 100644
index 000000000..c0f8f256a
--- /dev/null
+++ b/editions/tw5.com/tiddlers/images/Tiddlyhost Logo.png.meta
@@ -0,0 +1,3 @@
+title: Tiddlyhost Logo
+type: image/png
+tags: picture
diff --git a/editions/tw5.com/tiddlers/images/Xememex Logo.svg b/editions/tw5.com/tiddlers/images/Xememex Logo.svg
new file mode 100644
index 000000000..7aa281346
--- /dev/null
+++ b/editions/tw5.com/tiddlers/images/Xememex Logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/editions/tw5.com/tiddlers/images/Xememex Logo.svg.meta b/editions/tw5.com/tiddlers/images/Xememex Logo.svg.meta
new file mode 100644
index 000000000..1eab02541
--- /dev/null
+++ b/editions/tw5.com/tiddlers/images/Xememex Logo.svg.meta
@@ -0,0 +1,2 @@
+type: image/svg+xml
+title: Xememex Logo
diff --git a/editions/tw5.com/tiddlers/learning/Introduction to Lists.tid b/editions/tw5.com/tiddlers/learning/Introduction to Lists.tid
index dd2a0269c..0cc883e47 100644
--- a/editions/tw5.com/tiddlers/learning/Introduction to Lists.tid
+++ b/editions/tw5.com/tiddlers/learning/Introduction to Lists.tid
@@ -6,7 +6,7 @@ type: text/vnd.tiddlywiki
Making lists of items plays a central role in working with TiddlyWiki. The following is a brief run-through of some of the more common techniques.
-~TiddlyWiki [[uses|The Extended Listops Filters]] lists [[internally|ListField]] for many purposes so the word can have several meanings. Here we are concerned with displaying sequences of items, but not necessarily presented as a conventional bullet list.
+~TiddlyWiki [[uses|Extended Listops Filters]] lists [[internally|ListField]] for many purposes so the word can have several meanings. Here we are concerned with displaying sequences of items, but not necessarily presented as a conventional bullet list.
! Manually Typed Lists
diff --git a/editions/tw5.com/tiddlers/macros/ListMacro.tid b/editions/tw5.com/tiddlers/macros/ListMacro.tid
index 33bbb5713..fd7079850 100644
--- a/editions/tw5.com/tiddlers/macros/ListMacro.tid
+++ b/editions/tw5.com/tiddlers/macros/ListMacro.tid
@@ -15,7 +15,7 @@ Note: Each first [[step|Filter Step]] of a [[filter run|Filter Run]] not given a
;filter
: A [[filter|Filters]] selecting which tiddlers to include
-;caption
+;field
: The name of the field to transclude for each list item, defaulting to `caption`
;type
: An HTML element to use for the overall list element, defaulting to `ul`
diff --git a/editions/tw5.com/tiddlers/macros/import/say-hi-using-variables.tid b/editions/tw5.com/tiddlers/macros/import/say-hi-using-variables.tid
index 4aa265fa3..11064f388 100644
--- a/editions/tw5.com/tiddlers/macros/import/say-hi-using-variables.tid
+++ b/editions/tw5.com/tiddlers/macros/import/say-hi-using-variables.tid
@@ -1,3 +1,4 @@
+code-body: yes
created: 20150221145447000
modified: 20150221145626000
title: $:/editions/tw5.com/macro-examples/say-hi-using-variables
diff --git a/editions/tw5.com/tiddlers/macros/import/say-hi.tid b/editions/tw5.com/tiddlers/macros/import/say-hi.tid
index 2d2d31afc..55db4cc9a 100644
--- a/editions/tw5.com/tiddlers/macros/import/say-hi.tid
+++ b/editions/tw5.com/tiddlers/macros/import/say-hi.tid
@@ -1,8 +1,9 @@
+code-body: yes
created: 20150221145803000
modified: 20150221221536000
title: $:/editions/tw5.com/macro-examples/say-hi
type: text/vnd.tiddlywiki
-\define sayhi(name:"Bugs Bunny" address:"Rabbit Hole Hill")
+\define sayhi(name:"Bugs Bunny",address:"Rabbit Hole Hill")
Hi, I'm $name$ and I live in $address$.
\end
diff --git a/editions/tw5.com/tiddlers/macros/import/tags-of-current-tiddler.tid b/editions/tw5.com/tiddlers/macros/import/tags-of-current-tiddler.tid
index b1bfc753c..860ad33db 100644
--- a/editions/tw5.com/tiddlers/macros/import/tags-of-current-tiddler.tid
+++ b/editions/tw5.com/tiddlers/macros/import/tags-of-current-tiddler.tid
@@ -1,3 +1,4 @@
+code-body: yes
created: 20150221145803000
title: $:/editions/tw5.com/macro-examples/tags-of-current-tiddler
type: text/vnd.tiddlywiki
diff --git a/editions/tw5.com/tiddlers/macros/import/tv-wikilink-tooltip.tid b/editions/tw5.com/tiddlers/macros/import/tv-wikilink-tooltip.tid
index 11b442b8c..9687f4b15 100644
--- a/editions/tw5.com/tiddlers/macros/import/tv-wikilink-tooltip.tid
+++ b/editions/tw5.com/tiddlers/macros/import/tv-wikilink-tooltip.tid
@@ -1,5 +1,5 @@
+code-body: yes
created: 20150228120252000
-modified: 20150228120554000
title: $:/editions/tw5.com/macro-examples/tv-wikilink-tooltip
type: text/vnd.tiddlywiki
diff --git a/editions/tw5.com/tiddlers/nodejs/tiddlywiki.files_Files.tid b/editions/tw5.com/tiddlers/nodejs/tiddlywiki.files_Files.tid
index 6086dfebc..87ddf9b40 100644
--- a/editions/tw5.com/tiddlers/nodejs/tiddlywiki.files_Files.tid
+++ b/editions/tw5.com/tiddlers/nodejs/tiddlywiki.files_Files.tid
@@ -29,6 +29,8 @@ Each field can be specified as either a ''string'' or ''array'' value to be assi
** //extname// the extension of the filename of the file containing the tiddler
** //created// the creation date/time of the file containing the tiddler
** //modified// the modification date/time of the file containing the tiddler
+** <<.from-version "5.3.0">> //filepath// the path of the file containing the tiddler, relative to the ''path'' property of the directory (only usable in ''directories'' declarations)
+** <<.from-version "5.3.0">> //subdirectories// an array of the subdirectories in the file's path relative, to the ''path'' property of the directory (only usable in ''directories'' declarations)
* ''prefix'' - (optional) a string to be prepended to the value of the field
* ''suffix'' - (optional) a string to be appended to the value of the field
@@ -52,7 +54,7 @@ Directory specifications in the `directories` array may take the following forms
** ''filesRegExp'' - (optional) a [[regular expression|https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions]] that matches the filenames of the files that should be processed within the directory
** ''isTiddlerFile'' - (required) if `true`, the file will be treated as a [[tiddler file|TiddlerFiles]] and deserialised to extract the tiddlers. Otherwise, the raw content of the file is assigned to the `text` field without any parsing
** ''isEditableFile'' - <<.from-version "5.1.23">> (optional) if `true`, changes to the tiddler be saved back to the original file. The tiddler will be saved back to the original filepath as long as it does not generate a result from the $:/config/FileSystemPath filters, which will override the final filepath generated if a result is returned from a filter.
-** ''searchSubdirectories'' - <<.from-version "5.1.23">> (optional) if `true`, all subdirectories of the //path// are searched recursively for files that match the (optional) //filesRegExp//. If no //filesRegExp// is provided, all files in all subdirectories of the //path// are loaded. Tiddler titles generated via a //source// attribute (see above) will only include the filename, not any of the subdirectories of the path. If this results in multiple files with loaded with the same tiddler title, then only the last file loaded under that tiddler title will be in memory. In order to prevent this, you must have multiple directory objects listed and customise the title field with a //prefix// or //suffix// alongside the //source// attribute.
+** ''searchSubdirectories'' - <<.from-version "5.1.23">> (optional) if `true`, all subdirectories of the //path// are searched recursively for files that match the (optional) //filesRegExp//. If no //filesRegExp// is provided, all files in all subdirectories of the //path// are loaded. Tiddler titles generated via the //source// attribute //filename// (see above) will only include the filename, not any of the subdirectories of the path. If this results in multiple files with loaded with the same tiddler title, then only the last file loaded under that tiddler title will be in memory. In order to prevent this, you can use the //filepath// attribute instead of //filename//. Alternately, you can include multiple directory objects and customise the title field with a //prefix// or //suffix// alongside the //source// attribute.
** ''fields'' - (required) an object containing values that override or customise the fields provided in the tiddler file (see above)
Fields can also be overridden for particular files by creating a file with the same name plus the suffix `.meta` -- see TiddlerFiles.
@@ -95,6 +97,7 @@ This example retrieves all the files with the extension `.pdf` from a folder spe
]
}
```
+
!! Importing a folder of text files
This example retrieves all the files with the extension `.txt` from a folder specified by a relative path. This folder is within the wiki's base directory, and the current config file is in a directory within the wiki's "tiddlers/" directory. So, in this case the path starts with "../../" to traverse upwards two directory levels, and then down into the "externalnotes/" directory. Each tiddler is set up with the following fields:
@@ -130,4 +133,39 @@ This will load all text files in the `../../externalnotes/` directory into the w
From the examples in [[Customising Tiddler File Naming]] we see that the final `[!tag[externalnote]addprefix[wiki/]]` filter in the $:/config/FileSystemPaths tiddler excludes all tiddlers tagged with `externalnotes` (that have not matched an earlier filter). These tiddlers have their filepath retrieved from the $:/config/OriginalTiddlerPaths generated upon boot startup.
-Then, the `[tag[.txt]then[.txt]]` filter in the $:/config/FileSystemExtensions tiddler forces all these tiddlers to be saved back to disk as *.txt and accompanying *.txt.meta files (overriding the normal tiddler-type to file-type mapping). In this case, allowing the snippets of Tiddlywiki wikitext or markdown-text to be saved back to "text" *.txt files.
\ No newline at end of file
+Then, the `[tag[.txt]then[.txt]]` filter in the $:/config/FileSystemExtensions tiddler forces all these tiddlers to be saved back to disk as *.txt and accompanying *.txt.meta files (overriding the normal tiddler-type to file-type mapping). In this case, allowing the snippets of Tiddlywiki wikitext or markdown-text to be saved back to "text" *.txt files.
+
+!! Importing and auto-tagging images
+
+This example imports all the image files in the `files` directory and all its subdirectories as external-image tiddlers, and tags them based on their filepath. Each tiddler is set up with the following fields:
+
+* ''title'' - set to the URI decoded base filename of the text file
+* ''created'' - set to the creation date/time of the text file
+* ''modified'' - set to the modification date/time of the text file
+* ''type'' - set to `image/jpeg`. There is currently no way to infer the correct ContentType of the image tiddler from the file, but `image/jpeg` tiddlers should render correctly even with png or gif images. As an alternative, you could create separate definitions for jpg, png, and gif files with the `image/jpeg`, `image/png`, and `image/gif` types respectively.
+* ''tags'' - generated based on the path of the image relative to the parent directory (`files` in this case). Eg, images in `files/photos` will be tagged with `photos`, those in `files/photos/family` will be tagged with both `photos` and `family`, and those in the root `files` directory will have no tags.
+* ''text'' - set to an empty string
+* ''_canonical_uri'' - set to the full filepath of the image relative to the wiki root
+
+
+```
+{
+ "directories": [
+ {
+ "path": "../../files/",
+ "filesRegExp": "^.*\\.(?:jpg|jpeg|png|gif)$",
+ "isTiddlerFile": false,
+ "searchSubdirectories": true,
+ "fields": {
+ "title": {"source": "basename-uri-decoded"},
+ "created": {"source": "created"},
+ "modified": {"source": "modified"},
+ "type": "image/jpeg",
+ "tags": { "source": "subdirectories" },
+ "text": "",
+ "_canonical_uri": { "source": "filepath", "prefix": "files/" }
+ }
+ }
+ ]
+}
+```
diff --git a/editions/tw5.com/tiddlers/pragmas/Pragma_ _define.tid b/editions/tw5.com/tiddlers/pragmas/Pragma_ _define.tid
new file mode 100644
index 000000000..6058b7905
--- /dev/null
+++ b/editions/tw5.com/tiddlers/pragmas/Pragma_ _define.tid
@@ -0,0 +1,51 @@
+created: 20220917112233317
+modified: 20230419103154328
+tags: Pragmas
+title: Pragma: \define
+type: text/vnd.tiddlywiki
+
+The ''\define'' [[pragma|Pragmas]] is used to [[define macros|Macro Definitions]]. It is a shortcut syntax for the SetVariableWidget.
+
+The usual form allows macros to span multiple lines.
+
+```
+\define ([:],[:]...)
+
+\end []
+```
+
+Note that the `\end` marker can optionally specify the name of the macro to which it relates which allows macro definitions to be nested.
+
+There is also a single line form for shorter macros:
+
+```
+\define ([:],[:]...)
+```
+
+The first line of the definition specifies the macro name and any parameters. Each parameter has a name and, optionally, a default value that is used if no value is supplied on a particular call to the macro.
+
+The lines that follow contain the text of the macro text (i.e. the snippet represented by the macro name), until `\end` appears on a line by itself:
+
+<$codeblock code={{$:/editions/tw5.com/macro-examples/say-hi}}/>
+
+Alternatively, the entire definition can be presented on a single line without an `\end` marker:
+
+```
+\define sayhi(name:"Bugs Bunny") Hi, I'm $name$.
+```
+
+Macro definitions can be nested by specifying the name of the macro in the `\end` marker. For example:
+
+<
+\end actions
+<$button actions=<>>
+$caption$
+$button>
+\end special-button
+
+<>
+""">>
+
+A more formal [[presentation|Macro Definition Syntax]] of this syntax is also available.
diff --git a/editions/tw5.com/tiddlers/pragmas/Pragma_ _function.tid b/editions/tw5.com/tiddlers/pragmas/Pragma_ _function.tid
new file mode 100644
index 000000000..253c8b452
--- /dev/null
+++ b/editions/tw5.com/tiddlers/pragmas/Pragma_ _function.tid
@@ -0,0 +1,27 @@
+created: 20221009162634214
+modified: 20230419103154329
+tags: Pragmas
+title: Pragma: \function
+type: text/vnd.tiddlywiki
+
+<<.from-version "5.3.0">> The ''\function'' [[pragma|Pragmas]] is used to [[define custom functions|Functions]]. It is a shortcut syntax for the SetVariableWidget.
+
+The usual form allows custom functions to span multiple lines:
+
+```
+\function ([:],[:]...)
+
+\end []
+```
+
+Note that the `\end` marker can optionally specify the name of the function to which it relates, enabling function definitions to be nested inside procedures, macros or widget definitions.
+
+There is also a single line form for shorter functions:
+
+```
+\function ([:],[:]...)
+```
+
+The first line of the definition specifies the function name and any parameters. Each parameter has a name and, optionally, a default value that is used if no value is supplied on a particular call to the function. The lines that follow contain the text of the function (i.e. the snippet represented by the function name), until `\end` appears on a line by itself:
+
+See [[Functions]] for more details.
\ No newline at end of file
diff --git a/editions/tw5.com/tiddlers/pragmas/Pragma_ _import.tid b/editions/tw5.com/tiddlers/pragmas/Pragma_ _import.tid
new file mode 100644
index 000000000..5971a5490
--- /dev/null
+++ b/editions/tw5.com/tiddlers/pragmas/Pragma_ _import.tid
@@ -0,0 +1,17 @@
+created: 20220917113054582
+modified: 20230419103154329
+tags: Pragmas
+title: Pragma: \import
+type: text/vnd.tiddlywiki
+
+The ''\import'' [[pragma|Pragmas]] is used to import definitions from other tiddlers that are identified with a filter. It is a shortcut syntax for the ImportVariablesWidget.
+
+```
+\import
+```
+
+For example:
+
+```
+\import [all[shadows+tiddlers]tag[$:/tags/Macro]]
+```
diff --git a/editions/tw5.com/tiddlers/pragmas/Pragma_ _parameters.tid b/editions/tw5.com/tiddlers/pragmas/Pragma_ _parameters.tid
new file mode 100644
index 000000000..5f32b06eb
--- /dev/null
+++ b/editions/tw5.com/tiddlers/pragmas/Pragma_ _parameters.tid
@@ -0,0 +1,18 @@
+created: 20220917113154900
+modified: 20230419103154329
+tags: Pragmas
+title: Pragma: \parameters
+type: text/vnd.tiddlywiki
+
+<<.from-version "5.3.0">> The ''\parameters'' [[pragma|Pragmas]] is used within [[procedure|Procedure Definitions]] and [[widget|Widget Definitions]] definitions to declare the parameters that are expected, and their default values. It is a shortcut syntax for the ParametersWidget.
+
+```
+\parameters ([:],[:]...)
+```
+
+For example:
+
+```
+\parameters (firstname:"Joe",lastname:"Blogs")
+```
+
diff --git a/editions/tw5.com/tiddlers/pragmas/Pragma_ _procedure.tid b/editions/tw5.com/tiddlers/pragmas/Pragma_ _procedure.tid
new file mode 100644
index 000000000..082bc466d
--- /dev/null
+++ b/editions/tw5.com/tiddlers/pragmas/Pragma_ _procedure.tid
@@ -0,0 +1,55 @@
+created: 20221007132845007
+modified: 20230419103154329
+tags: Pragmas
+title: Pragma: \procedure
+type: text/vnd.tiddlywiki
+
+<<.from-version "5.3.0">> The ''\procedure'' [[pragma|Pragmas]] is used to [[define procedures|Procedure Definitions]]. It is a shortcut syntax for the SetVariableWidget with an implicit ParametersWidget.
+
+The usual form allows procedures to span multiple lines:
+
+```
+\procedure ([:],[:]...)
+
+\end []
+```
+
+Note that the `\end` marker can optionally specify the name of the procedure to which it relates which allows procedure definitions to be nested.
+
+There is also a single line form for shorter procedures:
+
+```
+\define ([:],[:]...)
+```
+
+The first line of the definition specifies the procedure name and any parameters. Each parameter has a name and, optionally, a default value that is used if no value is supplied on a particular call to the procedure. The lines that follow contain the text of the procedure text (i.e. the snippet represented by the procedure name), until `\end` appears on a line by itself:
+
+For example:
+
+```
+\procedure sayhi(name:"Bugs Bunny")
+Hi, I'm <>.
+\end
+
+<>
+```
+
+Alternatively, the entire definition can be presented on a single line without an `\end` marker:
+
+```
+\procedure sayhi(name:"Bugs Bunny") Hi, I'm <>.
+```
+
+Procedure definitions can be nested by specifying the name of the procedure in the `\end` marker. For example:
+
+<
+\end actions
+<$button actions=<>>
+<
>
+$button>
+\end special-button
+
+<>
+""">>
\ No newline at end of file
diff --git a/editions/tw5.com/tiddlers/pragmas/Pragma_ _rules.tid b/editions/tw5.com/tiddlers/pragmas/Pragma_ _rules.tid
new file mode 100644
index 000000000..799c9b71c
--- /dev/null
+++ b/editions/tw5.com/tiddlers/pragmas/Pragma_ _rules.tid
@@ -0,0 +1,25 @@
+created: 20220917112931273
+modified: 20230419103154329
+tags: Pragmas
+title: Pragma: \rules
+type: text/vnd.tiddlywiki
+
+The ''\rules'' [[pragma|Pragmas]] adjusts the set of parser rules used to parse the remaining text.
+
+```
+\rules only|expect
+```
+
+The list of available parser rules can be consulted in $:/ControlPanel -> Info -> Advanced -> Parsing.
+
+For example, in stylesheets it is typical to only use the rules associated with macros and transclusions:
+
+```
+\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline
+```
+
+Some users prefer not to use CamelCase links:
+
+```
+\rules except prettylink
+```
\ No newline at end of file
diff --git a/editions/tw5.com/tiddlers/pragmas/Pragma_ _whitespace.tid b/editions/tw5.com/tiddlers/pragmas/Pragma_ _whitespace.tid
new file mode 100644
index 000000000..273a35bea
--- /dev/null
+++ b/editions/tw5.com/tiddlers/pragmas/Pragma_ _whitespace.tid
@@ -0,0 +1,20 @@
+created: 20220917113002350
+modified: 20230419103154329
+tags: Pragmas
+title: Pragma: \whitespace
+type: text/vnd.tiddlywiki
+
+<<.from-version "5.1.15">> The ''\whitespace'' [[pragma|Pragmas]] determines how spaces and newlines are treated within wikitext. Note that this only applies to the printable text, and not to other text, such as the values of attributes.
+
+* ''notrim'' -- whitespace text is not subject to special processing (the default)
+* ''trim'' -- whitespace text is removed
+
+```
+\whitespace trim|notrim
+```
+
+For example:
+
+```
+\whitespace trim
+```
diff --git a/editions/tw5.com/tiddlers/pragmas/Pragma_ _widget.tid b/editions/tw5.com/tiddlers/pragmas/Pragma_ _widget.tid
new file mode 100644
index 000000000..f8e589d4a
--- /dev/null
+++ b/editions/tw5.com/tiddlers/pragmas/Pragma_ _widget.tid
@@ -0,0 +1,27 @@
+created: 20221009121950630
+modified: 20230419103154329
+tags: Pragmas
+title: Pragma: \widget
+type: text/vnd.tiddlywiki
+
+<<.from-version "5.3.0">> The ''\widget'' [[pragma|Pragmas]] is used to [[define custom widgets|Custom Widgets]]. It is a shortcut syntax for the SetVariableWidget with an implicit ParametersWidget.
+
+The usual form allows custom widgets to span multiple lines:
+
+```
+\widget ([:],[:]...)
+
+\end []
+```
+
+Note that the `\end` marker can optionally specify the name of the widget to which it relates which allows widget definitions to be nested.
+
+There is also a single line form for shorter widgets:
+
+```
+\widget ([:],[:]...)
+```
+
+The first line of the definition specifies the widget name and any parameters. Each parameter has a name and, optionally, a default value that is used if no value is supplied on a particular call to the widget. The lines that follow contain the text of the widget text (i.e. the snippet represented by the widget name), until `\end` appears on a line by itself:
+
+See [[Custom Widgets]] for more details.
\ No newline at end of file
diff --git a/editions/tw5.com/tiddlers/pragmas/Pragmas.tid b/editions/tw5.com/tiddlers/pragmas/Pragmas.tid
new file mode 100644
index 000000000..46981c51e
--- /dev/null
+++ b/editions/tw5.com/tiddlers/pragmas/Pragmas.tid
@@ -0,0 +1,13 @@
+created: 20220917112416666
+modified: 20230419103154329
+tags: Concepts [[WikiText Parser Modes]]
+title: Pragmas
+type: text/vnd.tiddlywiki
+
+A <<.def pragma>> is a special component of WikiText that provides control over the way the remaining text is parsed.
+
+Pragmas occupy lines that start with `\`. They can only appear at the start of the text of a tiddler, but blank lines and comments are allowed between them. If a pragma appears in the main body of the text, it is treated as if it was ordinary text.
+
+The following pragmas are available:
+
+<>
diff --git a/editions/tw5.com/tiddlers/procedures/Procedure Calls.tid b/editions/tw5.com/tiddlers/procedures/Procedure Calls.tid
new file mode 100644
index 000000000..a6bca3dba
--- /dev/null
+++ b/editions/tw5.com/tiddlers/procedures/Procedure Calls.tid
@@ -0,0 +1,56 @@
+caption: Macro Calls
+created: 20221007130006705
+modified: 20230419103154329
+tags: WikiText Procedures
+title: Procedure Calls
+type: text/vnd.tiddlywiki
+
+!! Introduction
+
+This tiddler describes the different ways in which [[procedure|Procedures]] can be called.
+
+!! Procedure Call Transclusion Shortcut
+
+To call a [[procedure|Procedures]], place `<<`double angle brackets`>>` around the name and any parameter values.
+
+```
+<>
+```
+
+By default, parameters are listed in the same order as in the procedure definition. A parameter can be labelled with its name and a colon to allow them to be listed in a different order.
+
+If no value is specified for a parameter, the default value given for that parameter in the [[procedure definition|Procedure Definitions]] is used instead. (If no default value was defined, the parameter is blank).
+
+Each parameter value can be enclosed in `'`single quotes`'`, `"`double quotes`"`, `"""`triple double quotes`"""` or `[[`double square brackets`]]`. Triple double quotes allow a value to contain almost anything. If a value contains no spaces or single or double quotes, it requires no delimiters.
+
+See the discussion about [[parser modes|WikiText parser mode: macro examples]]
+
+!! Procedure Calls with <<.wlink TranscludeWidget>> Widget
+
+The shortcut syntax expands to the <<.wlink TranscludeWidget>> widget with the `$variable` attribute specifying the name of the procedure to transclude.
+
+```
+<$transclude $variable="my-procedure" param="This is the parameter value"/>
+```
+
+The widget itself offers greater flexibility than the shortcut syntax, including the ability to specify dynamic parameter values.
+
+!! Assigning Procedure Calls to Attribute Values
+
+The text of a procedure can be directly assigned to an attribute of a widget or HTML element. The result of the procedure is not wikified, which means that [[parameter handling|Procedure Parameter Handling]] does not take place.
+
+```
+
>>
+...
+
+```
+
+!! Using Procedure Calls in Filters
+
+Procedure calls can be used in filters. The text is not wikified which again means that the parameters will be ignored.
+
+```
+<$list filter="[]">
+...
+$list>
+```
\ No newline at end of file
diff --git a/editions/tw5.com/tiddlers/procedures/Procedure Definitions.tid b/editions/tw5.com/tiddlers/procedures/Procedure Definitions.tid
new file mode 100644
index 000000000..e108f219d
--- /dev/null
+++ b/editions/tw5.com/tiddlers/procedures/Procedure Definitions.tid
@@ -0,0 +1,43 @@
+created: 20221007125701001
+modified: 20230419103154329
+tags: WikiText Procedures
+title: Procedure Definitions
+type: text/vnd.tiddlywiki
+
+!! Introduction
+
+This tiddler describes the different ways in which [[macros|Procedures]] can be defined.
+
+!! Procedure Definition Pragma
+
+Macros are created using the [[Pragma: \procedure]] at the start of a tiddler. The definitions are available in the rest of the tiddler that defines them, plus any tiddlers that it transcludes.
+
+```
+\define my-procedure(param)
+This is the macro text (param=<>)
+\end
+```
+
+!! Procedure Definition with Set Widget
+
+Procedures are implemented as a special kind of [[variable|Variables]] and so internally are actually defined with a <<.wlink SetWidget>> widget.
+
+```
+<$set name="my-procedure" value="This is the procedure text">
+...
+$set>
+```
+
+<<.note """that it is not currently possible to specify parameters when defining a procedure with the <<.wlink SetWidget>> widget.""">>
+
+!! Importing Procedure Definitions
+
+The [[Pragma: \import]] or <<.wlink ImportVariablesWidget>> widget can be used to copy procedure definitions from another tiddler.
+
+!! `$:/tags/Macro` Tag
+
+Global procedures can be defined using the [[SystemTag: $:/tags/Macro]].
+
+The tag [[SystemTag: $:/tags/Macro/View]] is used to define procedures that should only be available within the main view template and the preview panel.
+
+The tag [[SystemTag: $:/tags/Macro/View/Body]] is used to define procedures that should only be available within the main view template body and the preview panel.
diff --git a/editions/tw5.com/tiddlers/procedures/Procedure Parameter Handling.tid b/editions/tw5.com/tiddlers/procedures/Procedure Parameter Handling.tid
new file mode 100644
index 000000000..f4841e4e9
--- /dev/null
+++ b/editions/tw5.com/tiddlers/procedures/Procedure Parameter Handling.tid
@@ -0,0 +1,24 @@
+created: 20221007130538285
+modified: 20230419103154329
+tags: WikiText Procedures
+title: Procedure Parameter Handling
+type: text/vnd.tiddlywiki
+
+!! Introduction
+
+[[Procedure|Procedures]] parameters are made available as variables when the procedure contents are wikified.
+
+!! Accessing Parameters as Variables
+
+When procedures are wikified, the parameters can be accessed as variables.
+
+For example:
+
+<$macrocall $name="wikitext-example-without-html" src="""\procedure say-hi(name,address)
+Hi, I'm <> and I live in <>.
+\end
+
+<>
+"""/>
+
+Accessing parameters as variables only works in procedures that are wikified and not, for example, when a procedure is used as an attribute value.
diff --git a/editions/tw5.com/tiddlers/procedures/Procedures.tid b/editions/tw5.com/tiddlers/procedures/Procedures.tid
new file mode 100644
index 000000000..15b422647
--- /dev/null
+++ b/editions/tw5.com/tiddlers/procedures/Procedures.tid
@@ -0,0 +1,35 @@
+created: 20221007124007426
+modified: 20230419103154329
+tags: Concepts Reference
+title: Procedures
+type: text/vnd.tiddlywiki
+
+!! Introduction
+
+<<.from-version "5.3.0">> A <<.def procedure>> is a named snippet of text. They are typically defined with the [[Pragma: \procedure]]:
+
+```
+\procedure my-procedure(parameter:"Default value")
+This is the procedure, and the parameter is <>.
+\end
+```
+
+The name wrapped in double angled [[brackets|Brackets]] is used a shorthand way of [[transcluding|Transclusion]] the snippet. Each of these <<.def "procedure calls">> can supply a different set of parameters:
+
+```
+<>
+<>
+```
+
+The parameters that are specified in the procedure call are made available as variables.
+
+!! How Procedures Work
+
+Procedures are implemented as a special kind of [[variable|Variables]]. The only thing that distinguishes them from ordinary variables is the way that the parameters are handled.
+
+!! Using Procedures
+
+* [[Procedure Definitions]] describes how to create procedures
+* [[Procedure Calls]] describes how to use procedures
+* [[Procedure Parameter Handling]] describes how procedure parameters work
+
diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.16.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.16.tid
index 03754dbb6..90c62c110 100644
--- a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.16.tid
+++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.16.tid
@@ -112,7 +112,7 @@ Prompted by the [[General Data Protection Regulation (GDPR)|https://en.wikipedia
* [[Fixed|https://github.com/Jermolene/TiddlyWiki5/pull/3093]] problem with crash when dragging over TiddlyWiki on some browsers
* [[Fixed|https://github.com/Jermolene/TiddlyWiki5/pull/3079]] issue with new journal button
* [[Fixed|https://github.com/Jermolene/TiddlyWiki5/pull/3164]] problem with ''filter'' and ''value'' attributes of SetWidget
-* [[Fixed|https://github.com/Jermolene/TiddlyWiki5/pull/3190]] problem with numeric operands in the [[The Extended Listops Filters]]
+* [[Fixed|https://github.com/Jermolene/TiddlyWiki5/pull/3190]] problem with numeric operands in the [[Extended Listops Filters]]
* [[Fixed|https://github.com/Jermolene/TiddlyWiki5/commit/df1f7e9798b5f6c3d2c3fd82e438cbc9713ade04]] problem with "put" saver and 412 return codes
* [[Fixed|https://github.com/Jermolene/TiddlyWiki5/pull/3048]] problem with variable references in field values in the edit template
* [[Extended|https://github.com/Jermolene/TiddlyWiki5/pull/3219]] behaviour of list-after field so that the tiddler is placed at the end of the list if the list-after field is present but empty
diff --git a/editions/prerelease/tiddlers/Release 5.2.6.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.2.6.tid
similarity index 51%
rename from editions/prerelease/tiddlers/Release 5.2.6.tid
rename to editions/tw5.com/tiddlers/releasenotes/Release 5.2.6.tid
index 7bccaa61c..575d9d47b 100644
--- a/editions/prerelease/tiddlers/Release 5.2.6.tid
+++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.2.6.tid
@@ -1,39 +1,72 @@
caption: 5.2.6
-created: 20230119221001957
-modified: 20230119221001957
+created: 20230320184352916
+modified: 20230320184352916
+released: 20230320184352916
tags: ReleaseNotes
title: Release 5.2.6
type: text/vnd.tiddlywiki
-//[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.2.5...master]]//
+//[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.2.5...v5.2.6]]//
+
+<<.banner-credits
+ credit:"""Congratulations to [[StS|https://talk.tiddlywiki.org/u/StS]] for their winning design for the banner for this release (here is the [[competition thread|https://talk.tiddlywiki.org/t/new-release-banner-competition-for-tiddlywiki-v5-2-6/6403/3]] and the [[voting thread|https://talk.tiddlywiki.org/t/vote-for-the-tiddlywiki-banner-v5-2-6/6469]]).
+"""
+ url:"https://raw.githubusercontent.com/Jermolene/TiddlyWiki5/3a2831870b4418b8b01d155b057db5b7485562c1/editions/tw5.com/tiddlers/images/New%20Release%20Banner.png"
+>>
+
+! Major Improvements
+
+!! Improved Markdown Plugin
+
+* <<.link-badge-updated "https://github.com/Jermolene/TiddlyWiki5/pull/6528">> the [[Markdown Plugin]] to use the newer and better maintained [[markdown-it|https://github.com/markdown-it/markdown-it]] library. The previous Markdown plugin remains available as "markdown-legacy"
+
+!! Better Handling of Loss of Network Connectivity with Client Server Configuration
+
+* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/7169">> integration between the [[BrowserStorage Plugin]] and the client-server configuration to allow changes to be made while offline and then later resynchronised with the server
+
+!! New Diff-Match-Patch Primitives
+
+* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/7290">> three new operators exposing previously hidden features of the [[Diff-Match-Patch|https://neil.fraser.name/software/diff_match_patch]] library that is integrated with TiddlyWiki:
+** new [[levenshtein Operator]] to calculate the similarity of two strings as the number of characters that need to be inserted, deleted or modified in order to turn one into the other
+** new [[makepatches Operator]] and [[applypatches Operator]] that can be used to make and apply patches that represent the difference between two different texts. See the [[examples|makepatches and applypatches Operator (Examples)]]
! Translation Improvements
Improvements to the following translations:
* Chinese
+* German
* Italian
+* Polish
! Plugin Improvements
-* <<.link-badge-updated "https://github.com/Jermolene/TiddlyWiki5/pull/6528">> the [[Markdown Plugin]] to use the newer and better maintained [[markdown-it|https://github.com/markdown-it/markdown-it]] library. The previous Markdown plugin remains available as "markdown-legacy"
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/7176">> [[Innerwiki Plugin]] to allow the `<$data>` widget to override existing tiddler fields
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/7207">>, <<.link-badge-here "https://github.com/Jermolene/TiddlyWiki5/commit/c39ef398bffae12c0ed7324d9b6d9d29f0f2f9ff">> and <<.link-badge-here "https://github.com/Jermolene/TiddlyWiki5/commit/8f7441f296351a4dd0852c3c782f8874d398e052">> problem preventing [[Share Plugin]] from working properly
+* <<.link-badge-updated "https://github.com/Jermolene/TiddlyWiki5/commit/524cee1489f260375cac8cfe878fdc5942a4596e">> [[XLSX Plugin|XLSX Utilities Edition]] to handle importing numeric fields
+* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/commit/81f514116657d0d567be7a4c45762a85beaa8bc0">> Dynannotate plugin crash when using the fake DOM used for static rendering
+* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/7281">> bug where pasting text into the CodeMirror editor also opened an `$:/Import` tiddler
+* <<.link-badge-improved "https://github.com/Jermolene/TiddlyWiki5/pull/7334">> documentation for the [[Railroad Plugin]]
+! Accessibility Improvements
+
+* <<.link-badge-improved "https://github.com/Jermolene/TiddlyWiki5/pull/7232">> appearance of save wiki button so that it is accessible to users without colour vision
! Usability Improvements
* <<.link-badge-improved "https://github.com/Jermolene/TiddlyWiki5/pull/7217">> consistency of tiddler deletion by allowing missing tiddlers to be 'deleted', which just results in them being closed
* <<.link-badge-improved "https://github.com/Jermolene/TiddlyWiki5/commit/34643a42790777f1b235f57b5093bb29bd0b3a14">> layout switcher to include an optional icon for each layout
* <<.link-badge-removed "https://github.com/Jermolene/TiddlyWiki5/commit/c0615e20ecf7d5d5e66d8a2acd28b80e8d59688d">> [[improvements to table layout|https://github.com/Jermolene/TiddlyWiki5/pull/7010]] from v5.2.5 that have proved to not be backwards compatible
+* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/7323">> support for `$` HTML entity
! Widget Improvements
-*
+* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/pull/7222">> EditTextWidget to support `focusSelectFromStart` and `focusSelectFromEnd` attributes to give better control over text selection
! Filter improvements
* <<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/pull/7121">> [[encodeuricomponent Operator]] to encode characters such as `*` that are illegal in Windows filenames
+* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/commit/89fd8871b6217634c9896b9402069757ca5ea189">> [[encodebase64 Operator]] and [[decodebase64 Operator]]
! Hackability Improvements
@@ -41,6 +74,7 @@ Improvements to the following translations:
* <<.link-badge-improved "https://github.com/Jermolene/TiddlyWiki5/pull/7118">> readability of [[tag-picker Macro]] and [[keyboard-driven-input Macro]]
* <<.link-badge-improved "https://github.com/Jermolene/TiddlyWiki5/pull/7129">> reliability of [[list-links-draggable Macro]] and [[list-tagged-draggable Macro]] by using the new GenesisWidget instead of textual substitution
* <<.link-badge-improved "https://github.com/Jermolene/TiddlyWiki5/pull/7210">> [[external JavaScript core support|Using the external JavaScript template]] to make it possible to save an external JS wiki as a standard single file wiki
+* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/7007">> a warning message in the browser console when the Zoomin storyview fails due to the tiddler view template lacking a single containing element
! Bug Fixes
@@ -50,43 +84,60 @@ Improvements to the following translations:
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/7121">> (and <<.link-badge-here "https://github.com/Jermolene/TiddlyWiki5/pull/7219">>) overriding `toc-caption` macro for [[Table-of-Contents Macros]]
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/7212">> rendering of $:/core/ui/MoreSideBar/Tags when viewed within the story river
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/7156">> undefined variable crash in [[reduce Operator]], [[filter Operator]] and [[sortsub Operator]]
-* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/issues/7153">> GenesisWidget not to create anything if the `$type` attribute is blank or missing
+* <<.link-badge-improved "https://github.com/Jermolene/TiddlyWiki5/issues/7153">> GenesisWidget not to create anything if the `$type` attribute is blank or missing
+* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/7230">> GenesisWidget to pass `isBlock` flag to the generated widget
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/issues/7160">> crash using [[jsonget Operator]] with "fixed" as key name
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/commit/0b39e47ce88c7620b7a66c1553a71efaff06edb9">> importing of MP3 files to match current browser implementations
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/7122">> crash when attempting to create an element with a blank tag name
+* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/7224">> layout issue with "save tiddler" button
+* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/commit/3d0ec5b1bdc157f87d65b8c9b76e681c14337eb4">> (and <<.link-badge-here "https://github.com/Jermolene/TiddlyWiki5/commit/4e5c957e975459350cd7df3038e5fb3c7aea859f">>) handling of whitespace in lists to cover all Unicode whitespace characters
+* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/7228">> test spacing of parser rule checkboxes in control panel
+* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/commit/f249b79e81e51d48364ea8147fe27850df9f577f">> CSS classes assigned to edit toolbar buttons
+* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/issues/7247">> usage of broken CSS class `tc-storyview-zoomin-tiddler` in Zoomin story view
+* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/7243">> usage of `importTitle` and `autoOpenOnImport` options for [[WidgetMessage: tm-import-tiddlers]]
+* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/7276">> fixed text editor refresh when the palette is changed
+* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/issues/7270">> crash with LetWidget when referencing a variable that exists but has an undefined value
+* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/issues/7354">> unwanted double braces around tags specified in $:/config/NewTiddler/Tags when using "new here" button
! Node.js Improvements
-* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/7169">> integration between the [[BrowserStorage Plugin]] and the client-server configuration to allow changes to be made while offline and then later resynchronised with the server
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/7130">> duplicate fields in internal templates used in client-server configuration
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/issues/7138">> lazy loading not triggering a sync from the server
* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/commit/bf8e1ca5b0587787bf80692b0213bb7b038c7868">> crash on creating a new tiddler if anonymous users manage to create syncable tiddlers in a read only wiki
* <<.link-badge-improved "https://github.com/Jermolene/TiddlyWiki5/commit/95e61688397ff1bc9be04193bc4ce2e3c8c48dce">> handling of logout in the client-server configuration to avoid 404 errors
+* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/issues/7238">> problem with saving tiddlers with `_canonical_uri` field as `.tid` files
+* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/6953">> missing meta viewport to static river template
! Performance Improvements
-*
+* <<.link-badge-improved "https://github.com/Jermolene/TiddlyWiki5/pull/7299">> field indexer to more efficiently process lookups
! Acknowledgements
[[@Jermolene|https://github.com/Jermolene]] would like to thank the contributors to this release who have generously given their time to help improve TiddlyWiki:
<<.contributors """
+andrigamerita
AnthonyMuscio
BramChen
btheado
cdruan
CrossEye
cs8425
+EvidentlyCube
fkmiec
flibbles
GameDungeon
+hffqyd
jeffrey4l
joebordes
kookma
+linonetwo
m42e
Marxsal
+mateuszwilczek
newmedicine
+michsa
pippep
pmario
saqimtiaz
@@ -94,4 +145,4 @@ Telumire
twMat
wincentbalin
yaisog
-""">>
+""">>
\ No newline at end of file
diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.2.7.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.2.7.tid
new file mode 100644
index 000000000..62a6b5264
--- /dev/null
+++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.2.7.tid
@@ -0,0 +1,25 @@
+caption: 5.2.7
+created: 20230326083239710
+modified: 20230326083239710
+released: 20230326083239710
+tags: ReleaseNotes
+title: Release 5.2.7
+type: text/vnd.tiddlywiki
+
+//[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.2.6...v5.2.7]]//
+
+<<.banner-credits
+ credit:"""Congratulations to [[StS|https://talk.tiddlywiki.org/u/StS]] for their winning design for the banner for this release (here is the [[competition thread|https://talk.tiddlywiki.org/t/new-release-banner-competition-for-tiddlywiki-v5-2-6/6403/3]] and the [[voting thread|https://talk.tiddlywiki.org/t/vote-for-the-tiddlywiki-banner-v5-2-6/6469]]).
+"""
+ url:"https://raw.githubusercontent.com/Jermolene/TiddlyWiki5/7926af85419ef2f813276a05833598d6d65e2ecd/editions/tw5.com/tiddlers/images/New%20Release%20Banner.png"
+>>
+
+This is a bug fix release intended to resolve a backwards compatibility issue discovered in v5.2.6. See [[this GitHub ticket|https://github.com/Jermolene/TiddlyWiki5/issues/7371]] for the background.
+
+The issue is that trailing newlines within a macro definitions were being ignored, which affected whether the content were parsed in inline or block mode.
+
+Since v5.2.7 replaces v5.2.6 that was only released for less than a week, here is the [[release note for v5.2.6|Release 5.2.6]].
+
+! Release Note for v5.2.6
+
+{{Release 5.2.6}}
diff --git a/editions/tw5.com/tiddlers/saving/Saving to a Git service.tid b/editions/tw5.com/tiddlers/saving/Saving to a Git service.tid
index 3253d8313..113e2aa8b 100644
--- a/editions/tw5.com/tiddlers/saving/Saving to a Git service.tid
+++ b/editions/tw5.com/tiddlers/saving/Saving to a Git service.tid
@@ -15,7 +15,7 @@ Saving to a Git service is configured in the [[$:/ControlPanel]] in the ''Git Se
* ''Type'' - (mandatory) the type of the service (e.g. GitHub, GitLab)
* ''Username'' - (mandatory) the username for the Git service account used for saving changes
-* ''Password'' - (mandatory) the OAUTH token or personal access token for the specified account. Note that GitHub deprecated password authetication, permitted authentication methods are shown in the[[API documentation|https://developer.github.com/v3/#authentication]].
+* ''Password'' - (mandatory) the OAUTH token or personal access token for the specified account. Note that GitHub deprecated password authentication, permitted authentication methods are shown in the [[API documentation|https://developer.github.com/v3/#authentication]].
* ''Repository'' - (mandatory) the name of the Git repository. Both the owner name and the repository name must be specified. For example `Jermolene/TiddlyWiki5`
* ''Branch'' - (optional) the name of the branch to be used within the Git repository. Defaults to `main` (~GitHub) or `master` (~GitLab)"
* ''Path'' - (optional) the path to the target file. Defaults to `/`
diff --git a/editions/tw5.com/tiddlers/saving/Saving via a Minimal Web Server.tid b/editions/tw5.com/tiddlers/saving/Saving via a Minimal Web Server.tid
new file mode 100644
index 000000000..5bbf79485
--- /dev/null
+++ b/editions/tw5.com/tiddlers/saving/Saving via a Minimal Web Server.tid
@@ -0,0 +1,49 @@
+caption: tw5-server
+color: #70c9a0
+community-author: hffqyd
+created: 20230302011710789
+delivery: Server-side Script
+description: Web server for saving and uploading
+method: save
+modified: 20230302055929311
+tags: Android Chrome Firefox [[Internet Explorer]] Linux Mac Opera Safari Saving Windows iOS Edge
+title: Saving via a Minimal Web Server
+type: text/vnd.tiddlywiki
+
+A local server for TiddlyWiki5 that saves and backups wikis, inspired by
+[[tw5-server.rb | https://gist.github.com/jimfoltz/ee791c1bdd30ce137bc23cce826096da]].
+
+tw5-server provides features of:
+
+* Server for TiddlyWiki5, as well as other files (e.g. images used in TW5 `[img[images/*.png]]`);
+* Easy to save wiki via browsers;
+* Backup wiki in compress format (.gz), to save disk space;
+* Auto clean backups: keep one newest per previous month, keep all backups in current month.
+* Upload files/images to server, for use in tiddlywiki as external links.
+* Offer binary executable for Linux, macos and windows.
+
+Download executable script and binary at the github.com [[tw5-server|https://github.com/hffqyd/tw5-server]].
+
+! Usage
+
+```bash
+# python script:
+python tw5-server.py -p 8000 -d ./ -b backup_dir
+
+# binary file:
+tw5server -a:192.168.0.10 -p:8000 -d:./ -b:backup
+
+-h usage help
+-a address, defautl localhost
+-p port, default 8000
+-d directory to servering, default `current dir`
+-b backup directory name, default `backup`
+-l log saving messages to stdout
+
+Backups auto-clean strategy:
+Keep all backups in current month, keep only the newest one for previous months.
+```
+
+In Unix/Linux, just excute `./tw5-server.py` (with `chmod +x tw5-server.py`).
+
+Then go to http://localhost:8000 (or other address:port specified in command) in your web browser, and click on your wiki html file.
diff --git a/editions/tw5.com/tiddlers/styleguide/Documentation Macros.tid b/editions/tw5.com/tiddlers/styleguide/Documentation Macros.tid
index 0b92d0770..ac5d4ea19 100644
--- a/editions/tw5.com/tiddlers/styleguide/Documentation Macros.tid
+++ b/editions/tw5.com/tiddlers/styleguide/Documentation Macros.tid
@@ -1,5 +1,5 @@
created: 20150110182600000
-modified: 20211206080809651
+modified: 20230325161424684
tags: [[Improving TiddlyWiki Documentation]]
title: Documentation Macros
type: text/vnd.tiddlywiki
@@ -58,6 +58,13 @@ The following macros are used throughout ~TiddlyWiki's documentation. Their name
|.wlink |a link to a widget |<<.wlink ButtonWidget>> |
|.wlink2 |a link to a widget, with specified text |<<.wlink2 foo ButtonWidget>> |
+!Tabs
+|!Macro |!Used for |!Example |
+|.doc-tabs |showing a tab set in a documentation tiddler | -- |
+|.doc-tab-link |button to activate a tab | -- |
+|.widget-attr-link |button with a widget attribute name to activate a tab | -- |
+
+
!User interface
|!Macro |!Used for |!Example |
diff --git a/editions/tw5.com/tiddlers/styleguide/Reference Tiddlers.tid b/editions/tw5.com/tiddlers/styleguide/Reference Tiddlers.tid
index a42fdbe2e..e604761a6 100644
--- a/editions/tw5.com/tiddlers/styleguide/Reference Tiddlers.tid
+++ b/editions/tw5.com/tiddlers/styleguide/Reference Tiddlers.tid
@@ -1,7 +1,7 @@
created: 20141226192500000
-modified: 20150117152552000
-title: Reference Tiddlers
+modified: 20230318160831470
tags: [[Improving TiddlyWiki Documentation]]
+title: Reference Tiddlers
<<.def "Reference tiddlers">> offer raw information in a comprehensive interlinked way. The reader is likely to be an intermediate or expert user.
@@ -13,6 +13,7 @@ There are several subcategories:
;User manual
* Presenting technical details of ~WikiText features
* Subcategorised: messages, operators, widgets, etc
+** Widget documentation should follow the [[Widget Documentation Style Guide]]
;Developer manual
* Presenting technical details of ~TiddlyWiki's internal architecture
diff --git a/editions/tw5.com/tiddlers/styleguide/Widget Documentation Style Guide.tid b/editions/tw5.com/tiddlers/styleguide/Widget Documentation Style Guide.tid
new file mode 100644
index 000000000..924cd90ec
--- /dev/null
+++ b/editions/tw5.com/tiddlers/styleguide/Widget Documentation Style Guide.tid
@@ -0,0 +1,37 @@
+created: 20230318160840043
+modified: 20230325162525198
+tags: [[Reference Tiddlers]]
+title: Widget Documentation Style Guide
+
+Widget documentation generally consists of
+
+* an introductory summary of the widget's function
+* an overview of attributes and how the widget content is handled
+* more detailed attribute explanation when required
+* examples
+
+The //Content and Attributes// section should describe how the content of the widget is used, followed by a table of the possible attributes, each with a short description of a single sentence. The attribute names in the table and elsewhere in the tiddler should be rendered with the <<.var .attr>> macro. The <<.var .from-version>> macro should be used as first item in the description to designate the version at which a parameter became available.
+
+A subsection should be used for parameters that need an //extended description//, possibly with separate examples. When there are more than 2 such subsection necessary, the subsections should be split into their own tiddlers, and the <<.var .doc-tabs>> macro should be used to transclude them into the widget documentation tiddler as tabs.
+
+* The <<.var .doc-tabs>> macro is used without parameters
+* The <<.var .doc-tabs>> macro must not be used more than once within a single documentation tiddler
+* The tiddlers to be included in the tab group should be tagged with the respective widget documentation tiddler and have a <<.field description>> field set to <<.value tab>>
+* The <<.field caption>> contains the tab button text. It should be as short as possible. For the attribute name, the <<.var .attr>> macro should be used in the <<.field caption>>
+* The tab tiddlers should start with a level-2-heading that links to itself, so that they may be opened from within the tabs
+* They can contain examples if these are specific to the topic of the subsection
+
+In the attribute table, the <<.var .widget-attr-link>> macro can be used to turn attributes into a button that activates the respective tab. The <<.var .widget-attr-link>> macro is used like this
+
+```
+<<.widget-attr-link text: target: >>
+```
+
+Elsewhere, the <<.var .doc-tab-link>> macro can be used to activate the respective tab
+
+```
+<<.doc-tab-link text: target: tooltip: class: >>
+```
+The parameters <<.param tooltip>> and <<.param class>> are optional.
+
+Both link macros scroll to the tab group additionally to setting the selected tab. They can also be used within the tab contents tiddlers themselves. If a tab tiddler is opened outside the tab group, <<.var doc-tab-link>> will open the tiddler containing the tab group if it is not yet open, and scroll to its tab group if it is.
\ No newline at end of file
diff --git a/editions/tw5.com/tiddlers/system/doc-macros.tid b/editions/tw5.com/tiddlers/system/doc-macros.tid
index 28457d3c5..e4a425f9a 100644
--- a/editions/tw5.com/tiddlers/system/doc-macros.tid
+++ b/editions/tw5.com/tiddlers/system/doc-macros.tid
@@ -1,5 +1,5 @@
created: 20150117152607000
-modified: 20220714133424023
+modified: 20230325141733992
tags: $:/tags/Macro
title: $:/editions/tw5.com/doc-macros
type: text/vnd.tiddlywiki
@@ -61,6 +61,37 @@ type: text/vnd.tiddlywiki
\define .toc-tab() <<.tab "TableOfContents">>
\define .example-tab(_) $_$
+\define .doc-tabs()
+<$macrocall $name="tabs"
+ tabsList="[tagdescription[tab]]"
+ default={{{ [tagfirst[]] }}}
+ explicitState={{{ [addprefix[$:/state/tab/]] }}}
+ class={{{ [[doc-tabs]] [encodeuricomponent[]escapecss[]addprefix[doc-tabs-]] +[join[ ]] }}} />
+\end
+\define .doc-tab-link(text, target, tooltip:"", class:"")
+
+<$tiddler tiddler={{{ [search:text[.doc-tabs]] :else[tags[]search:text[.doc-tabs]first[]] :else[] }}} >
+<$button class={{{ [[tc-btn-invisible tc-tiddlylink]] [<__class__>] +[join[ ]] }}}
+ set={{{ [addprefix[$:/state/tab/]] }}}
+ setTo=<<__target__>>
+ tooltip=<<__tooltip__>>>
+ <<__text__>>
+
+ <$list filter="[[$:/StoryList]contains]" variable="ignore" emptyMessage="<$action-navigate />">
+ <$action-sendmessage $message="tm-scroll" selector={{{ [encodeuricomponent[]addprefix[.doc-tabs-]] }}} />
+ $list>
+ <$action-sendmessage $message="tm-scroll" selector={{{ [encodeuricomponent[]escapecss[]addprefix[.doc-tabs-]] }}} />
+$button>
+$tiddler>
+\end
+\define .widget-attr-link(text, target)
+<$macrocall $name=".doc-tab-link"
+ text={{{ [[]] [<__text__>] [[]] +[join[]] }}}
+ class="doc-tab-link"
+ target=<<__target__>>
+ tooltip={{{ [[Show more information about the ']] [<__text__>] [[' attribute]] +[join[]] }}} />
+\end
+
\define .button(_) {{$:/core/ui/Buttons/$_$!!caption}}
\define .icon(_) {{$_$}}
@@ -185,4 +216,4 @@ $credit$
\end
-
$link>
\end
diff --git a/editions/tw5.com/tiddlers/systemtags/SystemTag_ $__tags_ClassFilters_TiddlerTemplate.tid b/editions/tw5.com/tiddlers/systemtags/SystemTag_ $__tags_ClassFilters_TiddlerTemplate.tid
index 49ad90100..245e7cbdb 100644
--- a/editions/tw5.com/tiddlers/systemtags/SystemTag_ $__tags_ClassFilters_TiddlerTemplate.tid
+++ b/editions/tw5.com/tiddlers/systemtags/SystemTag_ $__tags_ClassFilters_TiddlerTemplate.tid
@@ -1,9 +1,14 @@
caption: $:/tags/ClassFilters/TiddlerTemplate
created: 20221020035738692
description: marks filters evaluated to dynamically add classes to the page template.
-modified: 20221020035933363
+modified: 20230326153057521
tags: SystemTags
title: SystemTag: $:/tags/ClassFilters/TiddlerTemplate
type: text/vnd.tiddlywiki
The [[system tag|SystemTags]] `$:/tags/ClassFilters/TiddlerTemplate` marks filters evaluated to dynamically add their output as CSS classes to the tiddler template.
+
+The variables available are within each filter:
+
+* <<.var storyTiddler>>: the tiddler in the story for which the filter should be evaluated.
+* <<.var currentTiddler>>: the tiddler holding the filter definition being evaluated.
diff --git a/editions/tw5.com/tiddlers/variables/Variable Usage.tid b/editions/tw5.com/tiddlers/variables/Variable Usage.tid
new file mode 100644
index 000000000..2166f206a
--- /dev/null
+++ b/editions/tw5.com/tiddlers/variables/Variable Usage.tid
@@ -0,0 +1,154 @@
+created: 20230421020225031
+modified: 20230422144812613
+tags:
+title: Variable Usage
+type: text/vnd.tiddlywiki
+
+\define m1(a1) $a1$ - <<__a1__>> - <>
+\procedure p1(a1) $a1$ - <<__a1__>> - <>
+\function f1(a1) "$a1$" "-" [<__a1__>] ="-" [] :and[join[ ]]
+
+!Ways to define variables and parameters
+|! how declared|! how parameters are defined|! accessing parameter values in the body|
+|\define|`()`|`$param$, <<__param__>>`|
+|~|<<.wlink ParametersWidget>> or `\parameters`|`<>`|
+|<<.wlink SetWidget>>, <<.wlink LetWidget>>, <<.wlink VarsWidget>>|<<.wlink ParametersWidget>> or `\parameters`|`<>`|
+|\procedure, \widget|`()`, <<.wlink ParametersWidget>> or `\parameters`|`<>`|
+|\function|`()`|``|
+|javascript macros|`exports.params` javascript property array|passed as normal javascript function parameter and so accessed as a normal javascript variable|
+
+!!Examples
+These examples are meant to provide insight into the various ways of defining and using parameters. In many cases they do not illustrate best practices.
+
+!!! \define
+
+<$let eg='\define mp1(a1) $a1$ - <<__a1__>>
+
+\define mp2() <$parameters a1><>$parameters>
+
+\define mp3()
+\parameters(a1)
+<>
+\end
+
+|<>|<>|<>|
+'>
+<$macrocall $name="copy-to-clipboard-above-right" src=<>/>
+<$codeblock code=<>/>
+$let>
+
+!!! $set, $let, $vars
+
+<$let eg='<$set name="sp1" value="<$parameters a1><>$parameters>">
+<$set name="sp2" value="""
+\parameters(a1)
+<$parameters a1><>$parameters>
+""">
+<$vars vp1="<$parameters a1><>$parameters>" vp2="""
+\parameters(a1)
+<$parameters a1><>$parameters>
+""">
+<$let lp1="<$parameters a1><>$parameters>" lp2="""
+\parameters(a1)
+<$parameters a1><>$parameters>
+""">
+
+|<>|<>|
+|<>|<>|
+|<>|<>|
+$let>
+$vars>
+$set>
+$set>
+'>
+<$macrocall $name="copy-to-clipboard-above-right" src=<>/>
+<$codeblock code=<>/>
+$let>
+
+!!! \procedure, \widget
+
+<$let eg='\procedure pp1(a1) <>
+
+\procedure pp2() <$parameters a1><>$parameters>
+
+\procedure pp3()
+\parameters(a1)
+<>
+\end
+
+\procedure wp1(a1) <>
+
+\widget wp2() <$parameters a1><>$parameters>
+
+\widget wp3()
+\parameters(a1)
+<>
+\end
+
+|<>|<>|<>|
+|<>|<>|<>|
+'>
+<$macrocall $name="copy-to-clipboard-above-right" src=<>/>
+<$codeblock code=<>/>
+$let>
+
+!!! \function
+<$let eg='\function fp1(a1) []
+|<>|'>
+<$macrocall $name="copy-to-clipboard-above-right" src=<>/>
+<$codeblock code=<>/>
+$let>
+
+
+!Behavior of invoked variables depends on how the variable was declared
+
+|!how invoked|!how declared|!behavior|
+|`<$transclude $variable=macro/>` or `<>` in normal wikitext context|\define|All wikitext and variable substitution and textual substitution takes place|
+|~|<<.wlink SetWidget>>, <<.wlink LetWidget>>, <<.wlink VarsWidget>>, \procedure, \widget|All wikitext and variable substitution takes place|
+|~|\function|Invoking a function in this way (`<>`) is a synonym for `<$text text={{{[function[macro]]}}}/>`. As with any filtered transclusion (i.e. triple curly braces), all results except the first are discarded.|
+||||
+|widget attribute: `
>/>`|\define|Textual substitution of parameters is performed on the body text. No further processing takes place. The result after textual substitution is used as the attribute's value|
+|~|<<.wlink SetWidget>>, <<.wlink LetWidget>>, <<.wlink VarsWidget>>, \procedure, \widget|Body text is retrieved as-is and used as the attribute's value.|
+|~|\function|When a function is invoked as `
>/>`, it is a synonym for `
`. As with any filtered transclusion (i.e. triple curly braces), all results except the first are discarded. That first result is used as the attribute's value. Note that functions are recursively processed even when invoked in this form. In other words a filter expression in a function can invoke another function and the processing will continue|
+||||
+|filter operator parameter: `[]`|\define|Textual substitution of parameters is performed on the body text. No further processing takes place. The result after textual substitution is used as the filter operator's parameter.|
+|~|<<.wlink SetWidget>>, <<.wlink LetWidget>>, <<.wlink VarsWidget>>, \procedure, \widget|Body text is retrieved as-is and used as the filter operator's parameter.|
+|~|\function|The body text of the function is treated as a filter expression and evaluated. The first result is passed to the operator as a parameter. The remaining results are discarded|
+||||
+|function call in a filter expression: `[function[macro]]`|\define, <<.wlink SetWidget>>, <<.wlink LetWidget>>, <<.wlink VarsWidget>>, \procedure, \widget|Every function is a variable, but only variables defined using \function are invokable using the <<.olink function>> filter operator. Attempts to use a non-function variable is the same as if the function doesn't exist. The behavior in this case is like the identity function. All filter input is passed unchanged to the output.|
+|~|\function|The body text of the function is treated as a filter expression and evaluated. This filter expression can itself contain a function call. Filter expressions can be factored out into functions arbitrarily deep.|
+
+!! Examples
+
+Below is an example macro, procedure and function definition. All three forms of parameter substitution `$a1$`, `<<__a1__>>`, and `<