tiddlywiki 5.2.0 → 5.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) hide show
  1. package/boot/boot.js +40 -3
  2. package/contributing.md +1 -1
  3. package/core/language/en-GB/ControlPanel.multids +15 -0
  4. package/core/modules/editor/engines/framed.js +1 -1
  5. package/core/modules/editor/engines/simple.js +1 -1
  6. package/core/modules/editor/factory.js +1 -1
  7. package/core/modules/editor/operations/text/focus-editor.js +17 -0
  8. package/core/modules/filterrunprefixes/cascade.js +53 -0
  9. package/core/modules/filterrunprefixes/filter.js +16 -9
  10. package/core/modules/filterrunprefixes/map.js +16 -9
  11. package/core/modules/filterrunprefixes/reduce.js +16 -18
  12. package/core/modules/filterrunprefixes/sort.js +10 -8
  13. package/core/modules/filters/listops.js +12 -0
  14. package/core/modules/filters/math.js +29 -0
  15. package/core/modules/filters/strings.js +11 -9
  16. package/core/modules/parsers/wikiparser/rules/html.js +4 -2
  17. package/core/modules/parsers/wikiparser/wikiparser.js +11 -8
  18. package/core/modules/server/routes/put-tiddler.js +1 -1
  19. package/core/modules/utils/dom/dragndrop.js +8 -2
  20. package/core/modules/utils/utils.js +0 -18
  21. package/core/modules/widgets/action-sendmessage.js +17 -7
  22. package/core/modules/widgets/action-setmultiplefields.js +86 -0
  23. package/core/modules/widgets/codeblock.js +7 -1
  24. package/core/modules/widgets/dropzone.js +2 -1
  25. package/core/modules/widgets/let.js +96 -0
  26. package/core/modules/widgets/link.js +2 -1
  27. package/core/modules/widgets/setmultiplevariables.js +81 -0
  28. package/core/modules/widgets/vars.js +2 -4
  29. package/core/modules/widgets/widget.js +20 -16
  30. package/core/modules/wiki.js +9 -4
  31. package/core/ui/Components/tag-link.tid +1 -1
  32. package/core/ui/ControlPanel/Cascades/EditTemplateBody.tid +9 -0
  33. package/core/ui/ControlPanel/Cascades/StoryTiddler.tid +9 -0
  34. package/core/ui/ControlPanel/Cascades/TiddlerColour.tid +9 -0
  35. package/core/ui/ControlPanel/Cascades/TiddlerIcon.tid +9 -0
  36. package/core/ui/ControlPanel/Cascades/ViewTemplateBody.tid +9 -0
  37. package/core/ui/ControlPanel/Cascades/ViewTemplateTitle.tid +9 -0
  38. package/core/ui/ControlPanel/Cascades.tid +9 -0
  39. package/core/ui/EditTemplate/body/canonical-uri.tid +13 -0
  40. package/core/ui/EditTemplate/body/default.tid +38 -0
  41. package/core/ui/EditTemplate/body.tid +1 -51
  42. package/core/ui/EditTemplate/tags.tid +1 -1
  43. package/core/ui/EditorToolbar/link-dropdown.tid +1 -1
  44. package/core/ui/EditorToolbar/preview.tid +4 -4
  45. package/core/ui/ListTaggedCascade.tid +14 -0
  46. package/core/ui/PageTemplate/story.tid +1 -1
  47. package/core/ui/PluginListItemTemplate.tid +13 -3
  48. package/core/ui/StoryTiddlerTemplate.tid +3 -0
  49. package/core/ui/TagPickerTagTemplate.tid +3 -3
  50. package/core/ui/TagTemplate.tid +1 -1
  51. package/core/ui/TiddlerIcon.tid +8 -0
  52. package/core/ui/ViewTemplate/body/blank.tid +3 -0
  53. package/core/ui/ViewTemplate/body/code.tid +3 -0
  54. package/core/ui/ViewTemplate/body/default.tid +7 -0
  55. package/core/ui/ViewTemplate/{import.tid → body/import.tid} +1 -2
  56. package/core/ui/ViewTemplate/body/plugin.tid +10 -0
  57. package/core/ui/ViewTemplate/body.tid +1 -9
  58. package/core/ui/ViewTemplate/title/default.tid +6 -0
  59. package/core/ui/ViewTemplate/title/system.tid +6 -0
  60. package/core/ui/ViewTemplate/title.tid +4 -17
  61. package/core/wiki/config/EditTemplateBodyFilters.multids +5 -0
  62. package/core/wiki/config/OfficialPluginLibrary.tid +1 -1
  63. package/core/wiki/config/StoryTiddlerTemplateFilters.multids +5 -0
  64. package/core/wiki/config/TiddlerColourFilters.multids +5 -0
  65. package/core/wiki/config/TiddlerIconFilters.multids +5 -0
  66. package/core/wiki/config/ViewTemplateBodyFilters.multids +8 -0
  67. package/core/wiki/config/ViewTemplateTitleFilters.multids +5 -0
  68. package/core/wiki/debugstylesheets.tid +9 -0
  69. package/core/wiki/macros/tag.tid +3 -1
  70. package/core/wiki/peek-stylesheets.tid +3 -0
  71. package/core/wiki/tags/EditTemplateBodyFilter.tid +2 -0
  72. package/core/wiki/tags/StoryTiddlerTemplateFilter.tid +2 -0
  73. package/core/wiki/tags/TiddlerColourFilter.tid +3 -0
  74. package/core/wiki/tags/TiddlerIconFilter.tid +3 -0
  75. package/core/wiki/tags/ViewTemplateBodyFilter.tid +3 -0
  76. package/core/wiki/tags/ViewTemplateTitleFilter.tid +3 -0
  77. package/editions/fr-FR/tiddlers/HelloThumbnail - Latest Version.tid +1 -1
  78. package/editions/prerelease/tiddlers/{Release 5.2.1.tid → Release 5.2.2.tid } +10 -18
  79. package/editions/test/tiddlers/tests/test-filters.js +4 -0
  80. package/editions/test/tiddlers/tests/test-html-parser.js +17 -11
  81. package/editions/test/tiddlers/tests/test-prefixes-filter.js +50 -0
  82. package/editions/test/tiddlers/tests/test-widget.js +34 -0
  83. package/editions/test/tiddlers/tests/test-wikitext-parser.js +30 -30
  84. package/editions/tw5.com/tiddlers/$__StoryList.tid +3 -3
  85. package/editions/tw5.com/tiddlers/{License.tid → about/License.tid} +0 -0
  86. package/editions/tw5.com/tiddlers/commands/NamedCommandParameters.tid +2 -2
  87. package/editions/tw5.com/tiddlers/community/Contributing.tid +2 -2
  88. package/editions/tw5.com/tiddlers/community/TW Icons by morosanuae.tid +2 -2
  89. package/editions/tw5.com/tiddlers/community/TiddlyWiki Hangouts.tid +2 -2
  90. package/editions/tw5.com/tiddlers/community/editions/_Noteself_ by Danielo Rodriguez.tid +2 -2
  91. package/editions/tw5.com/tiddlers/community/examples/Reveal.js by Devin Weaver.tid +2 -2
  92. package/editions/tw5.com/tiddlers/community/plugins/Encrypt single tiddler plugin.tid +2 -2
  93. package/editions/tw5.com/tiddlers/community/plugins/TiddlyMap by Felix Kuppers.tid +2 -2
  94. package/editions/tw5.com/tiddlers/community/resources/TW5 Magick.tid +2 -2
  95. package/editions/tw5.com/tiddlers/community/resources/_Dynamic Tables_ by Jed Carty.tid +2 -2
  96. package/editions/tw5.com/tiddlers/community/resources/_TiddlyServer_ by Matt Lauber.tid +5 -3
  97. package/editions/tw5.com/tiddlers/community/resources/_muritest_ by Simon Huber.tid +2 -2
  98. package/editions/tw5.com/tiddlers/concepts/Cascades.tid +47 -0
  99. package/editions/tw5.com/tiddlers/concepts/Concepts.tid +5 -3
  100. package/editions/tw5.com/tiddlers/concepts/Edit Template Body Cascade.tid +16 -0
  101. package/editions/tw5.com/tiddlers/concepts/Messages.tid +2 -2
  102. package/editions/tw5.com/tiddlers/concepts/ModuleType.tid +2 -2
  103. package/editions/tw5.com/tiddlers/concepts/Order of Tagged Tiddlers.tid +1 -1
  104. package/editions/tw5.com/tiddlers/concepts/Railroad Diagrams.tid +2 -1
  105. package/editions/tw5.com/tiddlers/concepts/Story Tiddler Template Cascade.tid +16 -0
  106. package/editions/tw5.com/tiddlers/concepts/Story Tiddler Template.tid +13 -0
  107. package/editions/tw5.com/tiddlers/concepts/TagTiddlers.tid +1 -1
  108. package/editions/tw5.com/tiddlers/concepts/Tiddler Colour Cascade.tid +16 -0
  109. package/editions/tw5.com/tiddlers/concepts/Tiddler Icon Cascade.tid +16 -0
  110. package/editions/tw5.com/tiddlers/concepts/View Template Body Cascade.tid +19 -0
  111. package/editions/tw5.com/tiddlers/concepts/View Template Title Cascade.tid +16 -0
  112. package/editions/tw5.com/tiddlers/customising/Alternative page layouts.tid +1 -1
  113. package/editions/tw5.com/tiddlers/customising/Creating new toolbar buttons.tid +35 -0
  114. package/editions/tw5.com/tiddlers/customising/Customise TiddlyWiki.tid +3 -3
  115. package/editions/tw5.com/tiddlers/customising/Customising TiddlyWiki's user interface.tid +75 -0
  116. package/editions/tw5.com/tiddlers/definitions/BT.tid +3 -2
  117. package/editions/tw5.com/tiddlers/definitions/MathML.tid +2 -2
  118. package/editions/tw5.com/tiddlers/definitions/Osmosoft.tid +3 -2
  119. package/editions/tw5.com/tiddlers/definitions/node-webkit.tid +2 -1
  120. package/editions/tw5.com/tiddlers/demonstrations/Alice in Wonderland.tid +4 -3707
  121. package/editions/tw5.com/tiddlers/demonstrations/Apple.tid +2 -2
  122. package/editions/tw5.com/tiddlers/demonstrations/Caruso - Ave Maria.tid +1 -0
  123. package/editions/tw5.com/tiddlers/demonstrations/CustomStoryTiddlerTemplateDemo.tid/Demo Tiddler List with Custom Story Tiddler Template.tid +10 -0
  124. package/editions/tw5.com/tiddlers/demonstrations/CustomStoryTiddlerTemplateDemo.tid/Styles.tid +31 -0
  125. package/editions/tw5.com/tiddlers/demonstrations/CustomStoryTiddlerTemplateDemo.tid/Template.tid +25 -0
  126. package/editions/tw5.com/tiddlers/demonstrations/CustomStoryTiddlerTemplateDemo.tid/TiddlerTemplateFilter.tid +5 -0
  127. package/editions/tw5.com/tiddlers/demonstrations/CustomTiddlerColourCascadeDemo/CustomTiddlerColourCascadeDemo.tid +9 -0
  128. package/editions/tw5.com/tiddlers/demonstrations/CustomTiddlerIconCascadeDemo/CustomTiddlerIconCascadeDemo.tid +9 -0
  129. package/editions/tw5.com/tiddlers/demonstrations/ImageGallery Example.tid +5 -16
  130. package/editions/tw5.com/tiddlers/demonstrations/KeyboardDrivenInput/Demonstration_ keyboard-driven-input Macro.tid +2 -2
  131. package/editions/tw5.com/tiddlers/demonstrations/KeyboardDrivenInput/kdi-demo-configtid.tid +4 -3
  132. package/editions/tw5.com/tiddlers/demonstrations/SampleNotification.tid +2 -1
  133. package/editions/tw5.com/tiddlers/demonstrations/SampleTiddlerFirst.tid +3 -1
  134. package/editions/tw5.com/tiddlers/demonstrations/SampleTiddlerSecond.tid +3 -1
  135. package/editions/tw5.com/tiddlers/demonstrations/SampleTiddlerThird.tid +3 -1
  136. package/editions/tw5.com/tiddlers/demonstrations/SampleWizard.tid +2 -1
  137. package/editions/tw5.com/tiddlers/demonstrations/SampleWizard2.tid +2 -1
  138. package/editions/tw5.com/tiddlers/demonstrations/TableOfContents/Contents.tid +3 -2
  139. package/editions/tw5.com/tiddlers/demonstrations/TableOfContents/First.tid +3 -3
  140. package/editions/tw5.com/tiddlers/demonstrations/TableOfContents/FirstOne.tid +2 -2
  141. package/editions/tw5.com/tiddlers/demonstrations/TableOfContents/FirstThree.tid +2 -2
  142. package/editions/tw5.com/tiddlers/demonstrations/TableOfContents/FirstTwo.tid +2 -2
  143. package/editions/tw5.com/tiddlers/demonstrations/TableOfContents/Fourth.tid +2 -2
  144. package/editions/tw5.com/tiddlers/demonstrations/TableOfContents/Second.tid +2 -2
  145. package/editions/tw5.com/tiddlers/demonstrations/TableOfContents/SecondOne.tid +2 -2
  146. package/editions/tw5.com/tiddlers/demonstrations/TableOfContents/SecondThree.tid +3 -3
  147. package/editions/tw5.com/tiddlers/demonstrations/TableOfContents/SecondThreeOne.tid +2 -2
  148. package/editions/tw5.com/tiddlers/demonstrations/TableOfContents/SecondThreeThree.tid +2 -2
  149. package/editions/tw5.com/tiddlers/demonstrations/TableOfContents/SecondThreeTwo.tid +2 -2
  150. package/editions/tw5.com/tiddlers/demonstrations/TableOfContents/SecondTwo.tid +2 -2
  151. package/editions/tw5.com/tiddlers/demonstrations/TableOfContents/Third.tid +3 -3
  152. package/editions/tw5.com/tiddlers/demonstrations/TableOfContents/ThirdOne.tid +2 -2
  153. package/editions/tw5.com/tiddlers/demonstrations/TableOfContents/ThirdThree.tid +2 -2
  154. package/editions/tw5.com/tiddlers/demonstrations/TableOfContents/ThirdTwo.tid +2 -2
  155. package/editions/tw5.com/tiddlers/demonstrations/Tagged with TagMacro.tid +2 -1
  156. package/editions/tw5.com/tiddlers/demonstrations/Tasks/Compose ballad.tid +3 -3
  157. package/editions/tw5.com/tiddlers/demonstrations/Tasks/Get the Ring.tid +3 -3
  158. package/editions/tw5.com/tiddlers/demonstrations/Tasks/Go to Mordor.tid +3 -3
  159. package/editions/tw5.com/tiddlers/demonstrations/Tasks/Kill the Dragon.tid +4 -4
  160. package/editions/tw5.com/tiddlers/demonstrations/Tasks/Make the beds.tid +3 -3
  161. package/editions/tw5.com/tiddlers/demonstrations/Tasks/done.tid +3 -1
  162. package/editions/tw5.com/tiddlers/demonstrations/Tasks/task.tid +3 -2
  163. package/editions/tw5.com/tiddlers/demonstrations/Weekdays/Days of the Week.tid +5 -4
  164. package/editions/tw5.com/tiddlers/demonstrations/Weekdays/Friday.tid +2 -1
  165. package/editions/tw5.com/tiddlers/demonstrations/Weekdays/Monday.tid +2 -1
  166. package/editions/tw5.com/tiddlers/demonstrations/Weekdays/Saturday.tid +3 -2
  167. package/editions/tw5.com/tiddlers/demonstrations/Weekdays/Sunday.tid +2 -1
  168. package/editions/tw5.com/tiddlers/demonstrations/Weekdays/Thursday.tid +2 -1
  169. package/editions/tw5.com/tiddlers/demonstrations/Weekdays/Tuesday.tid +2 -1
  170. package/editions/tw5.com/tiddlers/demonstrations/Weekdays/Wednesday.tid +2 -1
  171. package/editions/tw5.com/tiddlers/demonstrations/sampletag1.tid +3 -0
  172. package/editions/tw5.com/tiddlers/demonstrations/sampletag2.tid +3 -0
  173. package/editions/tw5.com/tiddlers/features/DateFormat.tid +7 -1
  174. package/editions/tw5.com/tiddlers/features/LazyLoading.tid +2 -3
  175. package/editions/tw5.com/tiddlers/features/Scalability.tid +4 -2
  176. package/editions/tw5.com/tiddlers/filters/acos Operator.tid +15 -0
  177. package/editions/tw5.com/tiddlers/filters/asin Operator.tid +15 -0
  178. package/editions/tw5.com/tiddlers/filters/atan Operator.tid +13 -0
  179. package/editions/tw5.com/tiddlers/filters/atan2 Operator.tid +15 -0
  180. package/editions/tw5.com/tiddlers/filters/cos Operator.tid +13 -0
  181. package/editions/tw5.com/tiddlers/filters/deserializers Operator.tid +1 -1
  182. package/editions/tw5.com/tiddlers/filters/enlist-input Operator.tid +1 -1
  183. package/editions/tw5.com/tiddlers/filters/examples/acos Operator (Examples).tid +7 -0
  184. package/editions/tw5.com/tiddlers/filters/examples/asin Operator (Examples).tid +7 -0
  185. package/editions/tw5.com/tiddlers/filters/examples/atan Operator (Examples).tid +7 -0
  186. package/editions/tw5.com/tiddlers/filters/examples/atan2 Operator (Examples).tid +7 -0
  187. package/editions/tw5.com/tiddlers/filters/examples/cos Operator (Examples).tid +7 -0
  188. package/editions/tw5.com/tiddlers/filters/examples/cycle Operator (Examples).tid +1 -1
  189. package/editions/tw5.com/tiddlers/filters/examples/log Operator (Examples).tid +1 -1
  190. package/editions/tw5.com/tiddlers/filters/examples/lookup Operator (Examples).tid +2 -1
  191. package/editions/tw5.com/tiddlers/filters/examples/match Operator (Examples).tid +1 -1
  192. package/editions/tw5.com/tiddlers/filters/examples/search-replace Operator (Examples).tid +8 -2
  193. package/editions/tw5.com/tiddlers/filters/examples/sin Operator (Examples).tid +7 -0
  194. package/editions/tw5.com/tiddlers/filters/examples/subfilter Operator (Examples).tid +25 -3
  195. package/editions/tw5.com/tiddlers/filters/examples/tan Operator (Examples).tid +7 -0
  196. package/editions/tw5.com/tiddlers/filters/examples/zth Operator (Examples).tid +10 -0
  197. package/editions/tw5.com/tiddlers/filters/list.tid +2 -2
  198. package/editions/tw5.com/tiddlers/filters/nth.tid +9 -7
  199. package/editions/tw5.com/tiddlers/filters/range.tid +1 -1
  200. package/editions/tw5.com/tiddlers/filters/sin Operator.tid +13 -0
  201. package/editions/tw5.com/tiddlers/filters/storyviews.tid +1 -1
  202. package/editions/tw5.com/tiddlers/filters/subfilter Operator.tid +4 -2
  203. package/editions/tw5.com/tiddlers/filters/syntax/Cascade Filter Run Prefix (Examples).tid +46 -0
  204. package/editions/tw5.com/tiddlers/filters/syntax/Cascade Filter Run Prefix.tid +20 -0
  205. package/editions/tw5.com/tiddlers/filters/syntax/Filter Expression.tid +4 -2
  206. package/editions/tw5.com/tiddlers/filters/syntax/Filter Filter Run Prefix (Examples).tid +30 -0
  207. package/editions/tw5.com/tiddlers/filters/syntax/Filter Filter Run Prefix.tid +27 -0
  208. package/editions/tw5.com/tiddlers/filters/syntax/Filter Run Prefix (Examples).tid +7 -36
  209. package/editions/tw5.com/tiddlers/filters/syntax/Intersection Filter Run Prefix (Examples).tid +36 -0
  210. package/editions/tw5.com/tiddlers/filters/syntax/Intersection Filter Run Prefix.tid +15 -0
  211. package/editions/tw5.com/tiddlers/filters/syntax/Map Filter Run Prefix (Examples).tid +26 -1
  212. package/editions/tw5.com/tiddlers/filters/syntax/Map Filter Run Prefix.tid +9 -1
  213. package/editions/tw5.com/tiddlers/filters/syntax/Named Filter Run Prefix.tid +2 -2
  214. package/editions/tw5.com/tiddlers/filters/syntax/Reduce Filter Run Prefix (Examples).tid +27 -0
  215. package/editions/tw5.com/tiddlers/filters/syntax/Reduce Filter Run Prefix.tid +38 -0
  216. package/editions/tw5.com/tiddlers/filters/tan Operator.tid +13 -0
  217. package/editions/tw5.com/tiddlers/filters/zth Operator.tid +18 -0
  218. package/editions/tw5.com/tiddlers/gettingstarted/GettingStarted - Android.tid +2 -1
  219. package/editions/tw5.com/tiddlers/gettingstarted/GettingStarted - Chrome.tid +2 -1
  220. package/editions/tw5.com/tiddlers/gettingstarted/GettingStarted - Firefox.tid +2 -1
  221. package/editions/tw5.com/tiddlers/gettingstarted/GettingStarted - Internet Explorer.tid +2 -1
  222. package/editions/tw5.com/tiddlers/gettingstarted/GettingStarted - Node.js.tid +2 -1
  223. package/editions/tw5.com/tiddlers/gettingstarted/GettingStarted - Online.tid +2 -2
  224. package/editions/tw5.com/tiddlers/gettingstarted/GettingStarted - Safari.tid +2 -1
  225. package/editions/tw5.com/tiddlers/gettingstarted/GettingStarted - iOS.tid +2 -1
  226. package/editions/tw5.com/tiddlers/{AllTiddlers.tid → hellothere/AllTiddlers.tid} +0 -0
  227. package/editions/tw5.com/tiddlers/hellothere/HelloThere.tid +1 -1
  228. package/editions/tw5.com/tiddlers/hellothere/Some of the things you can do with TiddlyWiki.tid +2 -2
  229. package/editions/tw5.com/tiddlers/hellothere/badges/ProductHunt-Badge.svg.tid +1 -0
  230. package/editions/tw5.com/tiddlers/hellothere/badges/ProductHunt-Link.tid +1 -0
  231. package/editions/tw5.com/tiddlers/hiddensettings/Hidden Setting NewImageType.tid +3 -1
  232. package/editions/tw5.com/tiddlers/hiddensettings/Hidden Setting ShowEditPreviewPerTiddler.tid +10 -0
  233. package/editions/tw5.com/tiddlers/hiddensettings/Hidden Setting_ Typin Refresh Delay.tid +2 -2
  234. package/editions/tw5.com/tiddlers/howtos/Creating SubStories.tid +21 -33
  235. package/editions/tw5.com/tiddlers/howtos/Debugging Stylesheets.tid +11 -0
  236. package/editions/tw5.com/tiddlers/howtos/How to create a custom story tiddler template.tid +40 -0
  237. package/editions/tw5.com/tiddlers/howtos/How to create a custom tiddler colour rule.tid +36 -0
  238. package/editions/tw5.com/tiddlers/howtos/How to create a custom tiddler icon rule.tid +36 -0
  239. package/editions/tw5.com/tiddlers/howtos/How to create dynamic editor toolbar buttons.tid +2 -2
  240. package/editions/tw5.com/tiddlers/howtos/Simple ways to write protect tiddlers.tid +4 -5
  241. package/editions/tw5.com/tiddlers/howtos/Text preview.tid +6 -2
  242. package/editions/tw5.com/tiddlers/howtos/Using Stylesheets.tid +8 -4
  243. package/editions/tw5.com/tiddlers/images/Icon Gallery.tid +14 -0
  244. package/editions/tw5.com/tiddlers/images/New Release Banner.png +0 -0
  245. package/editions/tw5.com/tiddlers/languages/LanguageGallery.tid +2 -2
  246. package/editions/tw5.com/tiddlers/macros/examples/colour-picker Macro (Example 1).tid +2 -2
  247. package/editions/tw5.com/tiddlers/macros/examples/image-picker Macro (Example 1).tid +2 -2
  248. package/editions/tw5.com/tiddlers/macros/examples/image-picker Macro (Example 2).tid +2 -2
  249. package/editions/tw5.com/tiddlers/macros/examples/unusedtitle Macro (Examples 1).tid +2 -2
  250. package/editions/tw5.com/tiddlers/mechanisms/RefreshThrottling.tid +2 -2
  251. package/editions/tw5.com/tiddlers/mechanisms/StateMechanism.tid +2 -2
  252. package/editions/tw5.com/tiddlers/messages/SampleModal.tid +2 -1
  253. package/editions/tw5.com/tiddlers/messages/SampleWindowTemplate.tid +10 -0
  254. package/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-edit-text-operation.tid +3 -0
  255. package/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-open-window.tid +22 -4
  256. package/editions/tw5.com/tiddlers/nodejs/Environment Variables on Node.js.tid +4 -2
  257. package/editions/tw5.com/tiddlers/nodejs/Installing TiddlyWiki on Node.js.tid +10 -3
  258. package/editions/tw5.com/tiddlers/nodejs/tiddlywiki.files_Files.tid +6 -5
  259. package/editions/tw5.com/tiddlers/nodejs/tiddlywiki.info_Files.tid +2 -2
  260. package/editions/tw5.com/tiddlers/platforms/TiddlyFox Apocalypse.tid +2 -2
  261. package/editions/tw5.com/tiddlers/platforms/TiddlyWiki in the Sky for TiddlyWeb.tid +3 -8
  262. package/editions/tw5.com/tiddlers/plugins/Plugin Types.tid +2 -2
  263. package/editions/tw5.com/tiddlers/reference/Reference.tid +1 -0
  264. package/editions/tw5.com/tiddlers/releasenotes/BetaReleases.tid +2 -2
  265. package/editions/tw5.com/tiddlers/releasenotes/Release 5.2.1.tid +118 -0
  266. package/editions/tw5.com/tiddlers/releasenotes/ReleaseTemplate.tid +3 -0
  267. package/editions/tw5.com/tiddlers/releasenotes/alpha/AlphaReleases.tid +2 -2
  268. package/editions/tw5.com/tiddlers/saving/Example config-tiddlyweb-host for IIS.txt.meta +1 -1
  269. package/editions/tw5.com/tiddlers/saving/Example package.json for IIS.txt.meta +1 -1
  270. package/editions/tw5.com/tiddlers/saving/Example tiddlywiki.info for IIS.txt.meta +1 -1
  271. package/editions/tw5.com/tiddlers/saving/Example web.config for IIS.txt.meta +1 -1
  272. package/editions/tw5.com/tiddlers/saving/Saving via WebDAV.tid +31 -1
  273. package/editions/tw5.com/tiddlers/styleguide/Documentation Macros.tid +6 -2
  274. package/editions/tw5.com/tiddlers/{TableOfContents.tid → system/TableOfContents.tid} +0 -0
  275. package/editions/tw5.com/tiddlers/system/doc-macros.tid +17 -0
  276. package/editions/tw5.com/tiddlers/system/doc-styles.tid +32 -1
  277. package/editions/tw5.com/tiddlers/system/operator-macros.tid +12 -5
  278. package/editions/tw5.com/tiddlers/system/operator-template.tid +8 -8
  279. package/editions/tw5.com/tiddlers/systemtags/SystemTag_ $__tags_Image.tid +2 -2
  280. package/editions/tw5.com/tiddlers/variables/examples/Sample Headings 1-2-3.tid +2 -1
  281. package/editions/tw5.com/tiddlers/variables/examples/Sample Headings 3-4-5.tid +2 -1
  282. package/editions/tw5.com/tiddlers/variables/examples/Sample Headings 4-5-6.tid +2 -1
  283. package/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget Example 1.tid +2 -2
  284. package/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget Example 2.tid +2 -2
  285. package/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget Example 3.tid +2 -2
  286. package/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget Example 4.tid +2 -2
  287. package/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget Template.tid +2 -2
  288. package/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget_Example.tid +2 -2
  289. package/editions/tw5.com/tiddlers/widgets/ActionListopsWidget.tid +52 -2
  290. package/editions/tw5.com/tiddlers/widgets/ActionSendMessageWidget.tid +3 -1
  291. package/editions/tw5.com/tiddlers/widgets/ActionSetMultipleFieldsWidget.tid +31 -0
  292. package/editions/tw5.com/tiddlers/widgets/ActionWidget Execution Modes.tid +5 -2
  293. package/editions/tw5.com/tiddlers/widgets/ActionWidgets.tid +4 -4
  294. package/editions/tw5.com/tiddlers/widgets/ButtonWidget.tid +2 -2
  295. package/editions/tw5.com/tiddlers/widgets/CheckboxWidget.tid +2 -2
  296. package/editions/tw5.com/tiddlers/widgets/DraggableWidget.tid +2 -2
  297. package/editions/tw5.com/tiddlers/widgets/DroppableWidget.tid +2 -2
  298. package/editions/tw5.com/tiddlers/widgets/DropzoneWidget.tid +2 -2
  299. package/editions/tw5.com/tiddlers/widgets/EditTextWidget.tid +8 -19
  300. package/editions/tw5.com/tiddlers/widgets/EditWidget.tid +2 -2
  301. package/editions/tw5.com/tiddlers/widgets/EventCatcherWidget.tid +2 -2
  302. package/editions/tw5.com/tiddlers/widgets/FieldManglerWidget.tid +3 -3
  303. package/editions/tw5.com/tiddlers/{Keyboard Codes.tid → widgets/Keyboard Codes.tid} +0 -0
  304. package/editions/tw5.com/tiddlers/widgets/KeyboardWidget.tid +2 -2
  305. package/editions/tw5.com/tiddlers/widgets/LetWidget.tid +57 -0
  306. package/editions/tw5.com/tiddlers/widgets/LinkCatcherWidget.tid +2 -2
  307. package/editions/tw5.com/tiddlers/widgets/ListopsData.tid +1 -0
  308. package/editions/tw5.com/tiddlers/widgets/MessageCatcherWidget.tid +2 -2
  309. package/editions/tw5.com/tiddlers/widgets/MessageHandlerWidgets.tid +13 -0
  310. package/editions/tw5.com/tiddlers/widgets/NavigatorWidget.tid +5 -2
  311. package/editions/tw5.com/tiddlers/widgets/RadioWidget.tid +2 -2
  312. package/editions/tw5.com/tiddlers/widgets/RangeWidget.tid +2 -2
  313. package/editions/tw5.com/tiddlers/widgets/SelectWidget.tid +15 -2
  314. package/editions/tw5.com/tiddlers/widgets/SetMultipleVariablesWidget.tid +33 -0
  315. package/editions/tw5.com/tiddlers/widgets/The Extended Listops Filters.tid +2 -1
  316. package/editions/tw5.com/tiddlers/widgets/TriggeringWidgets.tid +13 -0
  317. package/editions/tw5.com/tiddlers/widgets/VarsWidget.tid +7 -5
  318. package/editions/tw5.com/tiddlers/wikitext/Transclusion and Substitution.tid +3 -2
  319. package/languages/pl-PL/ControlPanel.multids +1 -1
  320. package/languages/pl-PL/Docs/PaletteColours.multids +1 -1
  321. package/languages/pl-PL/Import.multids +1 -1
  322. package/languages/pl-PL/Misc.multids +2 -2
  323. package/languages/pl-PL/SideBar.multids +1 -1
  324. package/languages/zh-Hans/ControlPanel.multids +15 -0
  325. package/languages/zh-Hant/ControlPanel.multids +15 -0
  326. package/licenses/cla-individual.md +10 -0
  327. package/package.json +1 -1
  328. package/plugins/tiddlywiki/codemirror/engine.js +55 -2
  329. package/readme.md +2 -2
  330. package/themes/tiddlywiki/vanilla/ThemeTweaks.tid +7 -3
  331. package/themes/tiddlywiki/vanilla/base.tid +6 -0
  332. package/themes/tiddlywiki/vanilla/reset.tid +1 -1
  333. package/core/ui/ViewTemplate/plugin.tid +0 -15
  334. package/editions/tw5.com/tiddlers/customising/Page and tiddler layout customisation.tid +0 -63
  335. package/editions/tw5.com/tiddlers/demonstrations/SampleAlert.tid +0 -9
@@ -288,6 +288,38 @@ describe("'reduce' and 'intersection' filter prefix tests", function() {
288
288
  tags: ["cakes","with tea"],
289
289
  text: "Does anyone eat pound cake?"
290
290
  });
291
+ wiki.addTiddler({
292
+ title: "$:/filter1",
293
+ text: "[tag[cakes]then[It is customary]]",
294
+ tags: "$:/tags/Filter $:/tags/SecondFilter"
295
+ });
296
+ wiki.addTiddler({
297
+ title: "$:/filter2",
298
+ text: "[<currentTiddler>tag[shopping]then[It is not customary]]",
299
+ tags: "$:/tags/Filter $:/tags/SecondFilter"
300
+ });
301
+ wiki.addTiddler({
302
+ title: "$:/filter3",
303
+ text: "[[Just a default]]",
304
+ tags: "$:/tags/Filter"
305
+ });
306
+ wiki.addTiddler({
307
+ title: "$:/tags/Filter",
308
+ list: "$:/filter1 $:/filter2 $:/filter3"
309
+ });
310
+ wiki.addTiddler({
311
+ title: "$:/tags/SecondFilter",
312
+ list: "$:/filter1 $:/filter2"
313
+ });
314
+
315
+ it("should handle the :cascade filter prefix", function() {
316
+ expect(wiki.filterTiddlers("[[Rice Pudding]] :cascade[all[shadows+tiddlers]tag[$:/tags/Filter]get[text]]").join(",")).toBe("It is not customary");
317
+ expect(wiki.filterTiddlers("[[chocolate cake]] :cascade[all[shadows+tiddlers]tag[$:/tags/Filter]get[text]]").join(",")).toBe("It is customary");
318
+ expect(wiki.filterTiddlers("[[Sparkling water]] :cascade[all[shadows+tiddlers]tag[$:/tags/Filter]get[text]]").join(",")).toBe("Just a default");
319
+ expect(wiki.filterTiddlers("[[Rice Pudding]] :cascade[all[shadows+tiddlers]tag[$:/tags/SecondFilter]get[text]]").join(",")).toBe("It is not customary");
320
+ expect(wiki.filterTiddlers("[[chocolate cake]] :cascade[all[shadows+tiddlers]tag[$:/tags/SecondFilter]get[text]]").join(",")).toBe("It is customary");
321
+ expect(wiki.filterTiddlers("[[Sparkling water]] :cascade[all[shadows+tiddlers]tag[$:/tags/SecondFilter]get[text]]").join(",")).toBe("");
322
+ });
291
323
 
292
324
  it("should handle the :reduce filter prefix", function() {
293
325
  expect(wiki.filterTiddlers("[tag[shopping]] :reduce[get[quantity]add<accumulator>]").join(",")).toBe("22");
@@ -384,6 +416,24 @@ describe("'reduce' and 'intersection' filter prefix tests", function() {
384
416
  expect(wiki.filterTiddlers("[tag[shopping]] :map[get[description]else{!!title}]").join(",")).toBe("A square of rich chocolate cake,a round yellow seed,Milk,Rice Pudding");
385
417
  // Return the first title from :map if the filter returns more than one result
386
418
  expect(wiki.filterTiddlers("[tag[shopping]] :map[tags[]]").join(",")).toBe("shopping,shopping,shopping,shopping");
419
+ // Prepend the position in the list using the index and length variables
420
+ expect(wiki.filterTiddlers("[tag[shopping]] :map[get[title]addprefix[-]addprefix<length>addprefix[of]addprefix<index>]").join(",")).toBe("0of4-Brownies,1of4-Chick Peas,2of4-Milk,3of4-Rice Pudding");
421
+ });
422
+
423
+ it("should handle macro parameters for filter run prefixes",function() {
424
+ var widget = require("$:/core/modules/widgets/widget.js");
425
+ var rootWidget = new widget.widget({ type:"widget", children:[ {type:"widget", children:[]} ] },
426
+ { wiki:wiki, document:$tw.document});
427
+ rootWidget.makeChildWidgets();
428
+ var anchorWidget = rootWidget.children[0];
429
+ rootWidget.setVariable("greet","Hello $name$",[{name:"name"}],true);
430
+ rootWidget.setVariable("echo","$text$",[{name:"text"}],true);
431
+ // :map prefix
432
+ expect(wiki.filterTiddlers("1 :map[subfilter<greet Tom>join[ ]]",anchorWidget).join(",")).toBe("Hello Tom");
433
+ expect(wiki.filterTiddlers('[tag[shopping]] :map[<echo "$(index)$ $(currentTiddler)$">]',anchorWidget).join(",")).toBe("0 Brownies,1 Chick Peas,2 Milk,3 Rice Pudding");
434
+ // :reduce prefix
435
+ expect(wiki.filterTiddlers("1 :reduce[subfilter<greet Tom>join[ ]]",anchorWidget).join(",")).toBe("Hello Tom");
436
+ expect(wiki.filterTiddlers('[tag[shopping]] :reduce[<echo "$(accumulator)$ $(index)$ $(currentTiddler)$,">]',anchorWidget).join(",")).toBe(" 0 Brownies, 1 Chick Peas, 2 Milk, 3 Rice Pudding,");
387
437
  });
388
438
  });
389
439
 
@@ -247,6 +247,40 @@ describe("Widget module", function() {
247
247
  expect(wrapper.children[0].children[2].sequenceNumber).toBe(4);
248
248
  });
249
249
 
250
+ it("should deal with the let widget", function() {
251
+ var wiki = new $tw.Wiki();
252
+ wiki.addTiddlers([
253
+ {title: "TiddlerOne", text: "lookup"},
254
+ {title: "TiddlerTwo", lookup: "value", newlookup: "value", wrong: "wrong"},
255
+ {title: "TiddlerThree", text: "wrong", value: "Happy Result", wrong: "ALL WRONG!!"}
256
+ ]);
257
+ var text="\\define macro() TiddlerThree\n"+
258
+ "\\define currentTiddler() TiddlerOne\n"+
259
+ "<$let "+
260
+ "field={{!!text}} "+
261
+ "currentTiddler='TiddlerTwo' "+
262
+ "field={{{ [all[current]get<field>] }}} "+
263
+ "currentTiddler=<<macro>>>"+
264
+ "<$transclude field=<<field>>/></$let>";
265
+ var widgetNode = createWidgetNode(parseText(text,wiki),wiki);
266
+ var wrapper = renderWidgetNode(widgetNode);
267
+ expect(wrapper.innerHTML).toBe("<p>Happy Result</p>");
268
+
269
+ // This is important. $Let needs to be aware enough not to let its
270
+ // own variables interfere with its ability to recognize no change.
271
+ // Doesn't matter that nothing has changed, we just need to make sure
272
+ // it recognizes that that its outward facing variables are unchanged
273
+ // EVEN IF some intermediate variables did change, there's no need to
274
+ // refresh.
275
+ wiki.addTiddler({title: "TiddlerOne", text: "newlookup"});
276
+ expect(widgetNode.refresh({})).toBe(false);
277
+
278
+ // But if we make a change that might result in different outfacing
279
+ // variables, then it should refresh
280
+ wiki.addTiddler({title: "TiddlerOne", text: "badlookup"});
281
+ expect(widgetNode.refresh({})).toBe(true);
282
+ });
283
+
250
284
  it("should deal with attributes specified as macro invocations", function() {
251
285
  var wiki = new $tw.Wiki();
252
286
  // Construct the widget node
@@ -25,88 +25,88 @@ describe("WikiText parser tests", function() {
25
25
  it("should parse tags", function() {
26
26
  expect(parse("<br>")).toEqual(
27
27
 
28
- [ { type : 'element', tag : 'p', children : [ { type : 'element', tag : 'br', isBlock : false, attributes : { }, start : 0, end : 4 } ] } ]
28
+ [ { type : 'element', tag : 'p', start : 0, end : 4, children : [ { type : 'element', tag : 'br', start : 0, end : 4, isBlock : false, attributes : { }, orderedAttributes: [ ] } ] } ]
29
29
 
30
30
  );
31
31
  expect(parse("</br>")).toEqual(
32
32
 
33
- [ { type : 'element', tag : 'p', children : [ { type : 'text', text : '</br>' } ] } ]
33
+ [ { type : 'element', tag : 'p', start : 0, end : 5, children : [ { type : 'text', text : '</br>', start : 0, end : 5 } ] } ]
34
34
 
35
35
  );
36
36
  expect(parse("<div>")).toEqual(
37
37
 
38
- [ { type : 'element', tag : 'p', children : [ { type : 'element', tag : 'div', isBlock : false, attributes : { }, children : [ ], start : 0, end : 5 } ] } ]
38
+ [ { type : 'element', tag : 'p', start : 0, end : 5, children : [ { type : 'element', tag : 'div', start : 0, end : 5, isBlock : false, attributes : { }, orderedAttributes: [ ], children : [ ] } ] } ]
39
39
 
40
40
  );
41
41
  expect(parse("<div/>")).toEqual(
42
42
 
43
- [ { type : 'element', tag : 'p', children : [ { type : 'element', tag : 'div', isSelfClosing : true, isBlock : false, attributes : { }, start : 0, end : 6 } ] } ]
43
+ [ { type : 'element', tag : 'p', start : 0, end : 6, children : [ { type : 'element', tag : 'div', isSelfClosing : true, isBlock : false, attributes : { }, orderedAttributes: [ ], start : 0, end : 6 } ] } ]
44
44
 
45
45
  );
46
46
  expect(parse("<div></div>")).toEqual(
47
47
 
48
- [ { type : 'element', tag : 'p', children : [ { type : 'element', tag : 'div', isBlock : false, attributes : { }, children : [ ], start : 0, end : 5 } ] } ]
48
+ [ { type : 'element', tag : 'p', start : 0, end : 11, children : [ { type : 'element', tag : 'div', isBlock : false, attributes : { }, orderedAttributes: [ ], children : [ ], start : 0, end : 5 } ] } ]
49
49
 
50
50
  );
51
51
  expect(parse("<div>some text</div>")).toEqual(
52
52
 
53
- [ { type : 'element', tag : 'p', children : [ { type : 'element', tag : 'div', isBlock : false, attributes : { }, children : [ { type : 'text', text : 'some text' } ], start : 0, end : 5 } ] } ]
53
+ [ { type : 'element', tag : 'p', start : 0, end : 20, children : [ { type : 'element', tag : 'div', start : 0, end : 20, isBlock : false, attributes : { }, orderedAttributes: [ ], children : [ { type : 'text', text : 'some text', start : 5, end : 14 } ], start : 0, end : 5 } ] } ]
54
54
 
55
55
  );
56
56
  expect(parse("<div attribute>some text</div>")).toEqual(
57
57
 
58
- [ { type : 'element', tag : 'p', children : [ { type : 'element', tag : 'div', isBlock : false, attributes : { attribute : { type : 'string', value : 'true', start : 4, end : 14, name: 'attribute' } }, children : [ { type : 'text', text : 'some text' } ], start : 0, end : 15 } ] } ]
58
+ [ { type : 'element', tag : 'p', start : 0, end : 30, children : [ { type : 'element', tag : 'div', isBlock : false, attributes : { attribute : { type : 'string', value : 'true', start : 4, end : 14, name: 'attribute' } }, orderedAttributes: [ { type : 'string', value : 'true', start : 4, end : 14, name: 'attribute' } ], children : [ { type : 'text', text : 'some text', start : 15, end : 24 } ], start : 0, end : 15 } ] } ]
59
59
 
60
60
  );
61
61
  expect(parse("<div attribute='value'>some text</div>")).toEqual(
62
62
 
63
- [ { type : 'element', tag : 'p', children : [ { type : 'element', tag : 'div', isBlock : false, attributes : { attribute : { type : 'string', name: 'attribute', value : 'value', start: 4, end: 22 } }, children : [ { type : 'text', text : 'some text' } ], start: 0, end: 23 } ] } ]
63
+ [ { type : 'element', tag : 'p', start : 0, end : 38, children : [ { type : 'element', tag : 'div', start: 0, end: 38, isBlock : false, attributes : { attribute : { type : 'string', name: 'attribute', value : 'value', start: 4, end: 22 } }, orderedAttributes: [ { type: 'string', name: 'attribute', value : 'value', start: 4, end: 22 } ], children : [ { type : 'text', text : 'some text', start : 23, end : 32 } ], start : 0, end : 23 } ] } ]
64
64
 
65
65
  );
66
66
  expect(parse("<div attribute={{TiddlerTitle}}>some text</div>")).toEqual(
67
67
 
68
- [ { type : 'element', tag : 'p', children : [ { type : 'element', tag : 'div', isBlock : false, attributes : { attribute : { type : 'indirect', name: 'attribute', textReference : 'TiddlerTitle', start : 4, end : 31 } }, children : [ { type : 'text', text : 'some text' } ], start : 0, end : 32 } ] } ]
68
+ [ { type : 'element', tag : 'p', start: 0, end: 47, children : [ { type : 'element', tag : 'div', isBlock : false, attributes : { attribute : { type : 'indirect', name: 'attribute', textReference : 'TiddlerTitle', start : 4, end : 31 } }, orderedAttributes: [ { type : 'indirect', name: 'attribute', textReference : 'TiddlerTitle', start : 4, end : 31 } ], children : [ { type : 'text', text : 'some text', start : 32, end : 41 } ], start : 0, end : 32 } ] } ]
69
69
 
70
70
  );
71
71
  expect(parse("<$reveal state='$:/temp/search' type='nomatch' text=''>")).toEqual(
72
72
 
73
- [ { type : 'element', tag : 'p', children : [ { type : 'reveal', tag: '$reveal', start : 0, attributes : { state : { start : 8, name : 'state', type : 'string', value : '$:/temp/search', end : 31 }, type : { start : 31, name : 'type', type : 'string', value : 'nomatch', end : 46 }, text : { start : 46, name : 'text', type : 'string', value : '', end : 54 } }, end : 55, isBlock : false, children : [ ] } ] } ]
73
+ [ { type : 'element', tag : 'p', start: 0, end: 55, children : [ { type : 'reveal', tag: '$reveal', start : 0, attributes : { state : { start : 8, name : 'state', type : 'string', value : '$:/temp/search', end : 31 }, type : { start : 31, name : 'type', type : 'string', value : 'nomatch', end : 46 }, text : { start : 46, name : 'text', type : 'string', value : '', end : 54 } }, orderedAttributes: [ { start : 8, name : 'state', type : 'string', value : '$:/temp/search', end : 31 }, { start : 31, name : 'type', type : 'string', value : 'nomatch', end : 46 }, { start : 46, name : 'text', type : 'string', value : '', end : 54 } ], end : 55, isBlock : false, children : [ ] } ] } ]
74
74
 
75
75
  );
76
76
  expect(parse("<div attribute={{TiddlerTitle!!field}}>some text</div>")).toEqual(
77
77
 
78
- [ { type : 'element', tag : 'p', children : [ { type : 'element', tag : 'div', isBlock : false, attributes : { attribute : { type : 'indirect', name : 'attribute', textReference : 'TiddlerTitle!!field', start : 4, end : 38 } }, children : [ { type : 'text', text : 'some text' } ], start : 0, end : 39 } ] } ]
78
+ [ { type : 'element', tag : 'p', start: 0, end: 54, children : [ { type : 'element', tag : 'div', isBlock : false, attributes : { attribute : { type : 'indirect', name : 'attribute', textReference : 'TiddlerTitle!!field', start : 4, end : 38 } }, orderedAttributes: [ { type : 'indirect', name : 'attribute', textReference : 'TiddlerTitle!!field', start : 4, end : 38 } ], children : [ { type : 'text', text : 'some text', start : 39, end : 48 } ], start : 0, end : 39 } ] } ]
79
79
 
80
80
  );
81
81
  expect(parse("<div attribute={{Tiddler Title!!field}}>some text</div>")).toEqual(
82
82
 
83
- [ { type : 'element', tag : 'p', children : [ { type : 'element', tag : 'div', isBlock : false, attributes : { attribute : { type : 'indirect', name : 'attribute', textReference : 'Tiddler Title!!field', start : 4, end : 39 } }, children : [ { type : 'text', text : 'some text' } ], start : 0, end : 40 } ] } ]
83
+ [ { type : 'element', tag : 'p', start: 0, end: 55, children : [ { type : 'element', tag : 'div', isBlock : false, attributes : { attribute : { type : 'indirect', name : 'attribute', textReference : 'Tiddler Title!!field', start : 4, end : 39 } }, orderedAttributes: [ { type : 'indirect', name : 'attribute', textReference : 'Tiddler Title!!field', start : 4, end : 39 } ], children : [ { type : 'text', text : 'some text', start : 40, end : 49 } ], start : 0, end : 40 } ] } ]
84
84
 
85
85
  );
86
86
  expect(parse("<div attribute={{TiddlerTitle!!field}}>\n\nsome text</div>")).toEqual(
87
87
 
88
- [ { type : 'element', start : 0, attributes : { attribute : { start : 4, name : 'attribute', type : 'indirect', textReference : 'TiddlerTitle!!field', end : 38 } }, tag : 'div', end : 39, isBlock : true, children : [ { type : 'element', tag : 'p', children : [ { type : 'text', text : 'some text' } ] } ] } ]
88
+ [ { type : 'element', start : 0, attributes : { attribute : { start : 4, name : 'attribute', type : 'indirect', textReference : 'TiddlerTitle!!field', end : 38 } }, orderedAttributes: [ { start : 4, name : 'attribute', type : 'indirect', textReference : 'TiddlerTitle!!field', end : 38 } ], tag : 'div', end : 39, isBlock : true, children : [ { type : 'element', tag : 'p', start : 41, end : 50, children : [ { type : 'text', text : 'some text', start : 41, end : 50 } ] } ] } ]
89
89
 
90
90
  );
91
91
  expect(parse("<div><div attribute={{TiddlerTitle!!field}}>\n\nsome text</div></div>")).toEqual(
92
92
 
93
- [ { type : 'element', tag : 'p', children : [ { type : 'element', start : 0, attributes : { }, tag : 'div', end : 5, isBlock : false, children : [ { type : 'element', start : 5, attributes : { attribute : { start : 9, name : 'attribute', type : 'indirect', textReference : 'TiddlerTitle!!field', end : 43 } }, tag : 'div', end : 44, isBlock : true, children : [ { type : 'element', tag : 'p', children : [ { type : 'text', text : 'some text' } ] } ] } ] } ] } ]
93
+ [ { type : 'element', tag : 'p', start: 0, end: 67, children : [ { type : 'element', start : 0, attributes : { }, orderedAttributes: [ ], tag : 'div', end : 5, isBlock : false, children : [ { type : 'element', start : 5, attributes : { attribute : { start : 9, name : 'attribute', type : 'indirect', textReference : 'TiddlerTitle!!field', end : 43 } }, orderedAttributes: [ { start : 9, name : 'attribute', type : 'indirect', textReference : 'TiddlerTitle!!field', end : 43 } ], tag : 'div', end : 44, isBlock : true, children : [ { type : 'element', tag : 'p', start : 46, end : 55, children : [ { type : 'text', text : 'some text', start : 46, end : 55 } ] } ] } ] } ] } ]
94
94
 
95
95
  );
96
96
  expect(parse("<div><div attribute={{TiddlerTitle!!field}}>\n\n!some heading</div></div>")).toEqual(
97
97
 
98
- [ { type : 'element', tag : 'p', children : [ { type : 'element', start : 0, attributes : { }, tag : 'div', end : 5, isBlock : false, children : [ { type : 'element', start : 5, attributes : { attribute : { start : 9, name : 'attribute', type : 'indirect', textReference : 'TiddlerTitle!!field', end : 43 } }, tag : 'div', end : 44, isBlock : true, children : [ { type : 'element', tag : 'h1', attributes : { class : { type : 'string', value : '' } }, children : [ { type : 'text', text : 'some heading</div></div>' } ] } ] } ] } ] } ]
98
+ [ { type : 'element', tag : 'p', start: 0, end: 71, children : [ { type : 'element', start : 0, attributes : { }, orderedAttributes: [ ], tag : 'div', end : 5, isBlock : false, children : [ { type : 'element', start : 5, attributes : { attribute : { start : 9, name : 'attribute', type : 'indirect', textReference : 'TiddlerTitle!!field', end : 43 } }, orderedAttributes: [ { start : 9, name : 'attribute', type : 'indirect', textReference : 'TiddlerTitle!!field', end : 43 } ], tag : 'div', end : 44, isBlock : true, children : [ { type : 'element', tag : 'h1', attributes : { class : { type : 'string', value : '' } }, children : [ { type : 'text', text : 'some heading</div></div>', start : 47, end : 71 } ] } ] } ] } ] } ]
99
99
 
100
100
  );
101
101
  expect(parse("<div><div attribute={{TiddlerTitle!!field}}>\n!some heading</div></div>")).toEqual(
102
102
 
103
- [ { type : 'element', tag : 'p', children : [ { type : 'element', start : 0, attributes : { }, tag : 'div', end : 5, isBlock : false, children : [ { type : 'element', start : 5, attributes : { attribute : { start : 9, name : 'attribute', type : 'indirect', textReference : 'TiddlerTitle!!field', end : 43 } }, tag : 'div', end : 44, isBlock : false, children : [ { type : 'text', text : '\n!some heading' } ] } ] } ] } ]
103
+ [ { type : 'element', tag : 'p', start: 0, end: 70, children : [ { type : 'element', start : 0, attributes : { }, orderedAttributes: [ ], tag : 'div', end : 5, isBlock : false, children : [ { type : 'element', start : 5, attributes : { attribute : { start : 9, name : 'attribute', type : 'indirect', textReference : 'TiddlerTitle!!field', end : 43 } }, orderedAttributes: [ { start : 9, name : 'attribute', type : 'indirect', textReference : 'TiddlerTitle!!field', end : 43 } ], tag : 'div', end : 44, isBlock : false, children : [ { type : 'text', text : '\n!some heading', start : 44, end : 58 } ] } ] } ] } ]
104
104
 
105
105
  );
106
106
  // Regression test for issue (#3306)
107
107
  expect(parse("<div><span><span>\n\nSome text</span></span></div>")).toEqual(
108
108
 
109
- [ { type : 'element', tag : 'p', children : [ { type : 'element', start : 0, attributes : { }, tag : 'div', end : 5, isBlock : false, children : [ { type : 'element', start : 5, attributes : { }, tag : 'span', end : 11, isBlock : false, children : [ { type : 'element', start : 11, attributes : { }, tag : 'span', end : 17, isBlock : true, children : [ { type : 'element', tag : 'p', children : [ { type : 'text', text : 'Some text' } ] } ] } ] } ] } ] } ]
109
+ [ { type : 'element', tag : 'p', start: 0, end: 48, children : [ { type : 'element', start : 0, attributes : { }, orderedAttributes: [ ], tag : 'div', end : 5, isBlock : false, children : [ { type : 'element', start : 5, attributes : { }, orderedAttributes: [ ], tag : 'span', end : 11, isBlock : false, children : [ { type : 'element', start : 11, attributes : { }, orderedAttributes: [ ], tag : 'span', end : 17, isBlock : true, children : [ { type : 'element', tag : 'p', start : 19, end : 28, children : [ { type : 'text', text : 'Some text', start : 19, end : 28 } ] } ] } ] } ] } ] } ]
110
110
 
111
111
  );
112
112
  });
@@ -130,38 +130,38 @@ describe("WikiText parser tests", function() {
130
130
  it("should parse inline macro calls", function() {
131
131
  expect(parse("<<john>><<paul>><<george>><<ringo>>")).toEqual(
132
132
 
133
- [ { type: 'element', tag: 'p', children: [ { type: 'macrocall', start: 0, params: [ ], name: 'john', end: 8 }, { type: 'macrocall', start: 8, params: [ ], name: 'paul', end: 16 }, { type: 'macrocall', start: 16, params: [ ], name: 'george', end: 26 }, { type: 'macrocall', start: 26, params: [ ], name: 'ringo', end: 35 } ] } ]
133
+ [ { type: 'element', tag: 'p', start: 0, end: 35, children: [ { type: 'macrocall', start: 0, params: [ ], name: 'john', end: 8 }, { type: 'macrocall', start: 8, params: [ ], name: 'paul', end: 16 }, { type: 'macrocall', start: 16, params: [ ], name: 'george', end: 26 }, { type: 'macrocall', start: 26, params: [ ], name: 'ringo', end: 35 } ] } ]
134
134
 
135
135
  );
136
136
  expect(parse("text <<john one:val1 two: 'val \"2\"' three: \"val '3'\" four: \"\"\"val 4\"5'\"\"\" five: [[val 5]] >>")).toEqual(
137
137
 
138
- [{ type: 'element', tag: 'p', children: [ { type: 'text', text: 'text ' }, { type: 'macrocall', name: 'john', start: 5, params: [ { type: 'macro-parameter', start: 11, value: 'val1', name: 'one', end: 20 }, { type: 'macro-parameter', start: 20, value: 'val "2"', name: 'two', end: 35 }, { type: 'macro-parameter', start: 35, value: 'val \'3\'', name: 'three', end: 52 }, { type: 'macro-parameter', start: 52, value: 'val 4"5\'', name: 'four', end: 73 }, { type: 'macro-parameter', start: 73, value: 'val 5', name: 'five', end: 89 } ], end: 92 } ] } ]
138
+ [{ type: 'element', tag: 'p', start: 0, end: 92, children: [ { type: 'text', text: 'text ', start: 0, end: 5 }, { type: 'macrocall', name: 'john', start: 5, params: [ { type: 'macro-parameter', start: 11, value: 'val1', name: 'one', end: 20 }, { type: 'macro-parameter', start: 20, value: 'val "2"', name: 'two', end: 35 }, { type: 'macro-parameter', start: 35, value: 'val \'3\'', name: 'three', end: 52 }, { type: 'macro-parameter', start: 52, value: 'val 4"5\'', name: 'four', end: 73 }, { type: 'macro-parameter', start: 73, value: 'val 5', name: 'five', end: 89 } ], end: 92 } ] } ]
139
139
 
140
140
  );
141
141
  expect(parse("ignored << carrots <<john>>")).toEqual(
142
142
 
143
- [ { type: 'element', tag: 'p', children: [ { type: 'text', text: 'ignored << carrots ' }, { type: 'macrocall', name: 'john', start: 19, params: [ ], end: 27 } ] } ]
143
+ [ { type: 'element', tag: 'p', start: 0, end: 27, children: [ { type: 'text', text: 'ignored << carrots ', start: 0, end: 19 }, { type: 'macrocall', name: 'john', start: 19, params: [ ], end: 27 } ] } ]
144
144
 
145
145
  );
146
146
  expect(parse("text <<<john>>")).toEqual(
147
147
 
148
- [ { type: 'element', tag: 'p', children: [ { type: 'text', text: 'text ' }, { type: 'macrocall', name: '<john', start: 5, params: [ ], end: 14 } ] } ]
148
+ [ { type: 'element', tag: 'p', start: 0, end: 14, children: [ { type: 'text', text: 'text ', start: 0, end: 5 }, { type: 'macrocall', name: '<john', start: 5, params: [ ], end: 14 } ] } ]
149
149
 
150
150
  );
151
151
  expect(parse("before\n<<john>>")).toEqual(
152
152
 
153
- [ { type: 'element', tag: 'p', children: [ { type: 'text', text: 'before\n' }, { type: 'macrocall', start: 7, params: [ ], name: 'john', end: 15 } ] } ]
153
+ [ { type: 'element', tag: 'p', start: 0, end: 15, children: [ { type: 'text', text: 'before\n', start: 0, end: 7 }, { type: 'macrocall', start: 7, params: [ ], name: 'john', end: 15 } ] } ]
154
154
 
155
155
  );
156
156
  // A single space will cause it to be inline
157
157
  expect(parse("<<john>> ")).toEqual(
158
158
 
159
- [ { type: 'element', tag: 'p', children: [ { type: 'macrocall', start: 0, params: [ ], name: 'john', end: 8 }, { type: 'text', text: ' ' } ] } ]
159
+ [ { type: 'element', tag: 'p', start: 0, end: 9, children: [ { type: 'macrocall', start: 0, params: [ ], name: 'john', end: 8 }, { type: 'text', text: ' ', start: 8, end: 9 } ] } ]
160
160
 
161
161
  );
162
162
  expect(parse("text <<outie one:'my <<innie>>' >>")).toEqual(
163
163
 
164
- [ { type: 'element', tag: 'p', children: [ { type: 'text', text: 'text ' }, { type: 'macrocall', start: 5, params: [ { type: 'macro-parameter', start: 12, value: 'my <<innie>>', name: 'one', end: 31 } ], name: 'outie', end: 34 } ] } ]
164
+ [ { type: 'element', tag: 'p', start: 0, end: 34, children: [ { type: 'text', text: 'text ', start: 0, end: 5 }, { type: 'macrocall', start: 5, params: [ { type: 'macro-parameter', start: 12, value: 'my <<innie>>', name: 'one', end: 31 } ], name: 'outie', end: 34 } ] } ]
165
165
 
166
166
  );
167
167
 
@@ -180,17 +180,17 @@ describe("WikiText parser tests", function() {
180
180
  );
181
181
  expect(parse("<< carrots\n\n<<john>>")).toEqual(
182
182
 
183
- [ { type: 'element', tag: 'p', children: [ { type: 'text', text: '<< carrots' } ] }, { type: 'macrocall', start: 12, params: [ ], name: 'john', end: 20, isBlock: true } ]
183
+ [ { type: 'element', tag: 'p', start : 0, end : 10, children: [ { type: 'text', text: '<< carrots', start : 0, end : 10 } ] }, { type: 'macrocall', start: 12, params: [ ], name: 'john', end: 20, isBlock: true } ]
184
184
 
185
185
  );
186
186
  expect(parse("before\n\n<<john>>")).toEqual(
187
187
 
188
- [ { type: 'element', tag: 'p', children: [ { type: 'text', text: 'before' } ] }, { type: 'macrocall', start: 8, name: 'john', params: [ ], end: 16, isBlock: true } ]
188
+ [ { type: 'element', tag: 'p', start : 0, end : 6, children: [ { type: 'text', text: 'before', start : 0, end : 6 } ] }, { type: 'macrocall', start: 8, name: 'john', params: [ ], end: 16, isBlock: true } ]
189
189
 
190
190
  );
191
191
  expect(parse("<<john>>\nafter")).toEqual(
192
192
 
193
- [ { type: 'macrocall', start: 0, name: 'john', params: [ ], end: 8, isBlock: true }, { type: 'element', tag: 'p', children: [ { type: 'text', text: 'after' } ] } ]
193
+ [ { type: 'macrocall', start: 0, name: 'john', params: [ ], end: 8, isBlock: true }, { type: 'element', tag: 'p', start: 9, end: 14, children: [ { type: 'text', text: 'after', start: 9, end: 14 } ] } ]
194
194
 
195
195
  );
196
196
  expect(parse("<<multiline arg:\"\"\"\n\nwikitext\n\"\"\" >>")).toEqual(
@@ -218,7 +218,7 @@ describe("WikiText parser tests", function() {
218
218
  );
219
219
  expect(parse("<<john param>>>")).toEqual(
220
220
 
221
- [ { type: 'element', tag: 'p', children: [ { type: 'macrocall', start: 0, params: [ { type: 'macro-parameter', start: 6, value: 'param', end: 12 } ], name: 'john', end: 14 }, { type: 'text', text: '>' } ] } ]
221
+ [ { type: 'element', tag: 'p', start: 0, end: 15, children: [ { type: 'macrocall', start: 0, params: [ { type: 'macro-parameter', start: 6, value: 'param', end: 12 } ], name: 'john', end: 14 }, { type: 'text', text: '>', start: 14, end: 15 } ] } ]
222
222
 
223
223
  );
224
224
  // equals signs should be allowed
@@ -233,7 +233,7 @@ describe("WikiText parser tests", function() {
233
233
  it("should parse horizontal rules", function() {
234
234
  expect(parse("---Not a rule\n\n----\n\nBetween\n\n---")).toEqual(
235
235
 
236
- [ { type : 'element', tag : 'p', children : [ { type : 'entity', entity : '&mdash;' }, { type : 'text', text : 'Not a rule' } ] }, { type : 'element', tag : 'hr' }, { type : 'element', tag : 'p', children : [ { type : 'text', text : 'Between' } ] }, { type : 'element', tag : 'hr' } ]
236
+ [ { type : 'element', tag : 'p', start : 0, end : 13, children : [ { type : 'entity', entity : '&mdash;' }, { type : 'text', text : 'Not a rule', start : 3, end : 13 } ] }, { type : 'element', tag : 'hr' }, { type : 'element', tag : 'p', start : 21, end : 28, children : [ { type : 'text', text : 'Between', start : 21, end : 28 } ] }, { type : 'element', tag : 'hr' } ]
237
237
 
238
238
  );
239
239
 
@@ -242,7 +242,7 @@ describe("WikiText parser tests", function() {
242
242
  it("should parse hard linebreak areas", function() {
243
243
  expect(parse("\"\"\"Something\nin the\nway she moves\n\"\"\"\n\n")).toEqual(
244
244
 
245
- [ { type : 'element', tag : 'p', children : [ { type : 'text', text : 'Something' }, { type : 'element', tag : 'br' }, { type : 'text', text : 'in the' }, { type : 'element', tag : 'br' }, { type : 'text', text : 'way she moves' }, { type : 'element', tag : 'br' } ] } ]
245
+ [ { type : 'element', tag : 'p', children : [ { type : 'text', text : 'Something', start : 3, end : 12 }, { type : 'element', tag : 'br' }, { type : 'text', text : 'in the', start : 13, end : 19 }, { type : 'element', tag : 'br' }, { type : 'text', text : 'way she moves', start : 20, end : 33 }, { type : 'element', tag : 'br' } ], start : 0, end : 37 } ]
246
246
 
247
247
  );
248
248
 
@@ -1,5 +1,5 @@
1
- created: 20210322152203906
2
- list: [[Documentation Macros]] HelloThere GettingStarted Community
3
- modified: 20210322152237613
1
+ created: 20211126104006194
2
+ list: [[Page and tiddler layout customisation]] [[Creating new buttons for the ViewToolbar and page controls]] [[Structuring TiddlyWiki]] Tagging [[Introduction to Lists]] [[Icon Gallery]] [[How to widen tiddlers (aka storyriver)]] [[How to turn off camel case linking]] [[How to put the last modification date in a banner]] [[How to hide the author's and other fields with CSS]] [[How to export tiddlers]] [[How to Customize TiddlyDesktop]] [[Editing Tiddlers with Vim]] [[Concatenating text and variables using macro substitution]] [[Demonstration: keyboard-driven-input Macro]] HelloThere GettingStarted Community
3
+ modified: 20211126111221917
4
4
  title: $:/StoryList
5
5
  type: text/vnd.tiddlywiki
@@ -1,6 +1,6 @@
1
1
  created: 20180626122427188
2
- modified: 20180626134639673
3
- tags: [[Using TiddlyWiki on Node.js]]
2
+ modified: 20211117234223960
3
+ tags: [[TiddlyWiki on Node.js]]
4
4
  title: NamedCommandParameters
5
5
  type: text/vnd.tiddlywiki
6
6
 
@@ -1,5 +1,5 @@
1
1
  created: 20131101111400000
2
- modified: 20210402095728684
2
+ modified: 20211115092001000
3
3
  tags: Community
4
4
  title: Contributing
5
5
  type: text/vnd.tiddlywiki
@@ -45,7 +45,7 @@ PR titles may also include a short prefix to indicate the subsystem to which the
45
45
 
46
46
  ! Commenting on Pull Requests
47
47
 
48
- One of the principles of open source is that many pairs of eyes on the code can improve quality. So, we welcome comments and critiques of pending PRs. [[Conventional Comments|https://conventionalcomments.org]] has some techcniques to help make comments as constructive and actionable as possible. Notably, they recommend prefixing a comment with a label to clarify the intention:
48
+ One of the principles of open source is that many pairs of eyes on the code can improve quality. So, we welcome comments and critiques of pending PRs. [[Conventional Comments|https://conventionalcomments.org]] has some techniques to help make comments as constructive and actionable as possible. Notably, they recommend prefixing a comment with a label to clarify the intention:
49
49
 
50
50
  |praise |Praises highlight something positive. Try to leave at least one of these comments per review. Do not leave false praise (which can actually be damaging). Do look for something to sincerely praise |
51
51
  |nitpick |Nitpicks are small, trivial, but necessary changes. Distinguishing nitpick comments significantly helps direct the reader's attention to comments requiring more involvement |
@@ -1,6 +1,6 @@
1
1
  created: 20210204010508263
2
- modified: 20210204010941713
3
- tags: Images SVG Icons
2
+ modified: 20211113225941563
3
+ tags: Images SVG Icons [[Other Resources]]
4
4
  title: "TW Icons" by morosanuae
5
5
  type: text/vnd.tiddlywiki
6
6
  url: https://morosanuae.github.io/tw-icons
@@ -1,10 +1,10 @@
1
1
  created: 20130823091700000
2
- modified: 20140912150339263
2
+ modified: 20211124214214045
3
3
  tags: Community Videos
4
4
  title: TiddlyWiki Hangouts
5
5
  type: text/vnd.tiddlywiki
6
6
 
7
- The TiddlyWiki community holds regular Google Hangouts, usually every Tuesday from 4pm to 6pm (UK time). They are announced in the [[TiddlyWiki Google group|https://groups.google.com/d/forum/tiddlywiki]] and on the [[TiddlyWiki Twitter account|https://twitter.com/TiddlyWiki]].
7
+ The TiddlyWiki community has held many Google Hangouts over the years. They are announced in the [[TiddlyWiki Google group|https://groups.google.com/d/forum/tiddlywiki]] and on the [[TiddlyWiki Twitter account|https://twitter.com/TiddlyWiki]].
8
8
 
9
9
  Past Hangouts are archived in this ~YouTube playlist:
10
10
 
@@ -5,8 +5,8 @@ created: 20141122093837330
5
5
  delivery: Web Service
6
6
  description: Free online service that you can also host yourself
7
7
  method: sync
8
- modified: 20210106151027179
9
- tags: Android Chrome Firefox [[Internet Explorer]] Linux Mac Opera PHP [[Other resources]] Safari Saving Windows iOS Edge [[Community Editions]]
8
+ modified: 20211113010826610
9
+ tags: Android Chrome Firefox [[Internet Explorer]] Linux Mac Opera PHP Safari Saving Windows iOS Edge [[Community Editions]] [[Other Resources]]
10
10
  title: "Noteself" by Danielo Rodríguez
11
11
  type: text/vnd.tiddlywiki
12
12
  url: https://noteself.github.io/
@@ -1,6 +1,6 @@
1
1
  created: 20200907161522189
2
- modified: 20200907162234327
3
- tags: Resources
2
+ modified: 20211113230558637
3
+ tags: Resources [[Other Resources]]
4
4
  title: "Reveal.js" by Devin Weaver
5
5
  type: text/vnd.tiddlywiki
6
6
  url: https://sukima.github.io/tiddlywiki-reveal-js/
@@ -1,6 +1,6 @@
1
1
  created: 20150602084548184
2
- modified: 20210106151027028
3
- tags: [[Community Plugns]]
2
+ modified: 20211113010652022
3
+ tags: [[Community Plugins]]
4
4
  title: "Encrypt single tiddler plugin" by Danielo Rodriguez
5
5
  type: text/vnd.tiddlywiki
6
6
  url: http://danielorodriguez.com/TW5-EncryptTiddlerPlugin/
@@ -1,6 +1,6 @@
1
1
  created: 20141122093837330
2
- modified: 20210106151027589
3
- tags: [[Community Resources]]
2
+ modified: 20211114205057710
3
+ tags: [[Community Plugins]] [[Other Resources]]
4
4
  title: TiddlyMap Plugin by Felix Küppers
5
5
  type: text/vnd.tiddlywiki
6
6
  url: http://tiddlymap.org
@@ -1,6 +1,6 @@
1
1
  created: 20140315085406905
2
- modified: 20210106151027357
3
- tags: [[Other Resources]] Tutorials [[Community plugins]]
2
+ modified: 20211114205310834
3
+ tags: [[Other Resources]] Tutorials [[Community Plugins]]
4
4
  title: "TW5 Magick" by Stephan Hradek
5
5
  type: text/vnd.tiddlywiki
6
6
  url: http://tw5magick.tiddlyspot.com/
@@ -1,6 +1,6 @@
1
1
  created: 20180309160958926
2
- modified: 20210106151027021
3
- tags: [[Other Resourches]]
2
+ modified: 20211113010607278
3
+ tags: [[Other Resources]]
4
4
  title: "Dynamic Tables" by Jed Carty
5
5
  type: text/vnd.tiddlywiki
6
6
  url: http://ooktech.com/jed/ExampleWikis/DynamicTables/
@@ -1,11 +1,14 @@
1
1
  created: 20161226165024380
2
2
  creator: Matt Lauber
3
- modified: 20210106151027226
4
- tags: [[Other resources]]
3
+ modified: 20211113230709926
4
+ tags: [[Other Resources]]
5
5
  title: "TiddlyServer" by Matt Lauber
6
6
  type: text/vnd.tiddlywiki
7
7
  url: https://github.com/mklauber/TiddlyServer/releases/
8
8
 
9
+ ''Note:'' This is an older version of ~TiddlyServer. A modern version can be referenced [[here.|TiddlyServer by Arlen Beiler]]
10
+
11
+ ----
9
12
  TiddlyServer is a special purpose Desktop app, designed to facilitate managing multiple instances of TiddlyWiki running as a server. It does not require internet acess to access the wikis.
10
13
 
11
14
  {{!!url}}
@@ -14,4 +17,3 @@ TiddlyServer is a special purpose Desktop app, designed to facilitate managing m
14
17
  TiddlyServer can import both TiddlyWiki files and TiddlyFolder wikis. For each wiki, you specify a prefix to serve it with and the source to import from. It will copy the wikis to its own internal store and begin serving them up at http://localhost:8080/{prefix}/. The export button for each wiki will convert it to a single file wiki.
15
18
 
16
19
  <<<
17
-
@@ -1,6 +1,6 @@
1
1
  created: 20171219165418434
2
- modified: 20210106151027169
3
- tags: [[Other resources]]
2
+ modified: 20211113230637633
3
+ tags: [[Other Resources]]
4
4
  title: "muritest" by Simon Huber
5
5
  type: text/vnd.tiddlywiki
6
6
  url: http://muritest.tiddlyspot.com
@@ -0,0 +1,47 @@
1
+ created: 20211201100326006
2
+ modified: 20211206164704335
3
+ tags: Concepts
4
+ title: Cascades
5
+ type: text/vnd.tiddlywiki
6
+
7
+ !! Introduction
8
+
9
+ Cascades are a key mechanism used to construct and customise TiddlyWiki's user interface.
10
+
11
+ <<.tip "See [[Customising TiddlyWiki's user interface]] for an overview of all the customisation mechanisms">>
12
+
13
+ !! How cascades work
14
+
15
+ Cascades provide a means to select one of multiple values based on flexible, extensible criteria. They can be thought of as a list of conditions that are evaluated in turn until one of them matches.
16
+
17
+ Each cascade is defined by a special tag which identifies the tiddlers containing the conditions to be matched. The [[Order of Tagged Tiddlers]] determines the order in which the conditions are processed, and provides the means for arranging new rules at specific points in the cascade.
18
+
19
+ The conditions are defined by a [[Filter Expression]] in the text field. The filters are evaluated with the list of input titles set to the title of the tiddler to be considered. The `currentTiddler` variable is also set to the title of the tiddler to be considered.
20
+
21
+ If the filter returns no result then that result will be ignored and the cascade proceeds to test the next condition. If the filter expression does return at least one result then it serves as the result of the entire cascade.
22
+
23
+ The [[Cascade Filter Run Prefix]] provides the implementation of the underlying logic.
24
+
25
+ !! Example
26
+
27
+ The [[Story Tiddler Template Cascade]] contains the logic for determining a tiddler should be displayed as an editable draft or in view mode. By default, it consists of two tiddlers containing the following list of rules:
28
+
29
+ # `[is[draft]then{$:/config/ui/EditTemplate}]` – if it is a draft tiddler, use the template title given in the tiddler $:/config/ui/EditTemplate
30
+ # `[{$:/config/ui/ViewTemplate}] ` – otherwise, use the template title given in the tiddler $:/config/ui/ViewTemplate
31
+
32
+ !! Usage in the core
33
+
34
+ The TiddlyWiki core uses cascades to choose the following elements:
35
+
36
+ |[[Story Tiddler Template Cascade]] |The template used to display a particular tiddler in the story river. By default, the edit template is chosen for draft tiddlers, and the view template for others |
37
+ |[[Tiddler Icon Cascade]] |The optional icon associated with a particular tiddler (displayed alongside the title) |
38
+ |[[Tiddler Colour Cascade]] |The optional colour associated with a particular tiddler (used to colour the tiddler icon and if the tiddler is used as a tag also provides the colour for the tag pill) |
39
+ |[[View Template Title Cascade]] |The template used to display the title of a particular tiddler (used by the default view template to display the tiddler title) |
40
+ |[[View Template Body Cascade]] |The template used to display the view mode body of a particular tiddler (used by the default view template to display the tiddler body) |
41
+ |[[Edit Template Body Cascade]] |The template used to display the edit mode body of a particular tiddler (used by the default edit template to display the tiddler body editor) |
42
+
43
+ You can see the current settings for each cascade in $:/ControlPanel under the ''Info'' -> ''Advanced'' -> ''Cascades'' tab.
44
+
45
+ !! See Also
46
+
47
+ <<list-links "[tag[Cascades]]">>
@@ -1,8 +1,10 @@
1
1
  color: #FF8383
2
- created: 201308251447
3
- modified: 201308251447
4
- title: Concepts
2
+ created: 20130825144700000
3
+ list: Cascades ColourPalettes Commands [[Current Tiddler]] DataTiddlers [[Date Fields]] DefaultTiddlers DictionaryTiddlers ExternalImages Filters [[Hard and Soft Links]] JSONTiddlers [[Keyboard Shortcut Tiddler]] Macros Messages Modules PermaLinks Plugins Pragma [[Railroad Diagrams]] ShadowTiddlers [[Story River]] SystemTags SystemTiddlers Tagging TemplateTiddlers TextReference TiddlerFields TiddlerLinks Tiddlers TiddlyWiki TiddlyWiki5 [[Title List]] [[Title Selection]] Transclusion Variables Widgets Wiki WikiText
4
+ modified: 20211201100624625
5
5
  tags: Reference
6
+ title: Concepts
7
+ type: text/vnd.tiddlywiki
6
8
 
7
9
  These are the concepts underlying TiddlyWiki. Understanding how these ideas fit together is the key to getting the most from TiddlyWiki.
8
10
 
@@ -0,0 +1,16 @@
1
+ created: 20211206161652630
2
+ modified: 20211206161959460
3
+ tags: Cascades
4
+ title: Edit Template Body Cascade
5
+ type: text/vnd.tiddlywiki
6
+
7
+ The edit template body cascade is a [[cascade|Cascades]] used by the default edit template to choose the template for displaying the tiddler body.
8
+
9
+ The default edit template body cascade consists of:
10
+
11
+ # If the tiddler has the field ''_canonical_uri'' then use the template $:/core/ui/EditTemplate/body/canonical-uri to display the remote URL
12
+ # Otherwise, use the template $:/core/ui/EditTemplate/body/default which provides the default editing interface
13
+
14
+ You can see the current settings for the view template body cascade in $:/ControlPanel under the ''Info'' -> ''Advanced'' -> ''Cascades'' -> ''Edit Template Body'' tab.
15
+
16
+ <<list-links "[tag[Edit Template Body Cascade]]">>
@@ -1,10 +1,10 @@
1
1
  created: 20140226083311937
2
- modified: 20140226090209479
2
+ modified: 20211117042057208
3
3
  tags: Concepts Reference
4
4
  title: Messages
5
5
  type: text/vnd.tiddlywiki
6
6
 
7
- Widget messages are generated by widgets in response to user actions. They flow up the widget tree until they are handled by an ancestor widget.
7
+ Widget ''messages'' are generated by [[Widgets]] in response to user actions. Messages have a <<.param name>>, an optional primary <<.param parameter>>, and one or more optional named parameters. These messages travel up the widget tree where they are handled by ancestor widgets or the core itself.
8
8
 
9
9
  The following widget messages are implemented by the core:
10
10
 
@@ -1,6 +1,6 @@
1
1
  created: 20131129162847412
2
- modified: 20150917193804197
3
- tags: Modules
2
+ modified: 20211121031330912
3
+ tags: Modules Definitions
4
4
  title: ModuleType
5
5
  type: text/vnd.tiddlywiki
6
6
 
@@ -1,5 +1,5 @@
1
1
  created: 20150124125646000
2
- modified: 20170328161702062
2
+ modified: 20211127140005352
3
3
  tags: Tagging
4
4
  title: Order of Tagged Tiddlers
5
5
  type: text/vnd.tiddlywiki
@@ -1,5 +1,6 @@
1
1
  created: 20150105133800000
2
- modified: 20150124181306000
2
+ modified: 20211117212441252
3
+ tags: Concepts
3
4
  title: Railroad Diagrams
4
5
 
5
6
  <<.def "Railroad diagrams">>, sometimes called <<.def "syntax diagrams">>, are a visual way of explaining the syntax rules of a computer language. Reading one is like reading a public transport map.