tiddlywiki 5.3.1 → 5.3.2

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 (364) hide show
  1. package/.github/workflows/ci.yml +9 -2
  2. package/bin/build-site.sh +25 -5
  3. package/bin/ci-test.sh +16 -0
  4. package/boot/boot.js +12 -0
  5. package/core/language/en-GB/Exporters.multids +1 -1
  6. package/core/language/en-GB/Help/commands.tid +1 -1
  7. package/core/language/en-GB/Help/savewikifolder.tid +2 -2
  8. package/core/language/en-GB/Help/server.tid +1 -1
  9. package/core/language/en-GB/Types/image_svg_xml.tid +1 -1
  10. package/core/language/en-GB/Types/image_x-icon.tid +1 -1
  11. package/core/modules/commands/savetiddlers.js +1 -1
  12. package/core/modules/editor/engines/framed.js +1 -1
  13. package/core/modules/editor/engines/simple.js +1 -1
  14. package/core/modules/filters/all.js +5 -5
  15. package/core/modules/filters/encodings.js +6 -2
  16. package/core/modules/filters/json-ops.js +95 -1
  17. package/core/modules/filters/listops.js +1 -0
  18. package/core/modules/parsers/textparser.js +5 -4
  19. package/core/modules/parsers/wikiparser/rules/conditional.js +120 -0
  20. package/core/modules/parsers/wikiparser/wikiparser.js +31 -8
  21. package/core/modules/savers/github.js +1 -1
  22. package/core/modules/startup/windows.js +2 -1
  23. package/core/modules/syncer.js +160 -122
  24. package/core/modules/utils/dom/dom.js +3 -3
  25. package/core/modules/utils/dom/http.js +1 -1
  26. package/core/modules/utils/fakedom.js +5 -1
  27. package/core/modules/utils/utils.js +27 -4
  28. package/core/modules/widgets/browse.js +10 -0
  29. package/core/modules/widgets/button.js +15 -3
  30. package/core/modules/widgets/checkbox.js +11 -0
  31. package/core/modules/widgets/draggable.js +16 -5
  32. package/core/modules/widgets/droppable.js +14 -2
  33. package/core/modules/widgets/image.js +19 -14
  34. package/core/modules/widgets/link.js +12 -2
  35. package/core/modules/widgets/list.js +176 -19
  36. package/core/modules/widgets/radio.js +4 -0
  37. package/core/modules/widgets/range.js +4 -0
  38. package/core/modules/widgets/scrollable.js +66 -1
  39. package/core/modules/widgets/select.js +34 -26
  40. package/core/modules/widgets/transclude.js +19 -6
  41. package/core/modules/widgets/widget.js +35 -19
  42. package/core/modules/wiki.js +2 -2
  43. package/core/templates/html-json-skinny-tiddler.tid +0 -1
  44. package/core/templates/html-json-tiddler.tid +1 -1
  45. package/core/templates/store.area.template.html.tid +4 -4
  46. package/core/ui/ControlPanel/Basics.tid +2 -2
  47. package/core/ui/EditTemplate/body/default.tid +12 -8
  48. package/core/ui/EditTemplate/fields.tid +2 -2
  49. package/core/ui/EditTemplate/type.tid +1 -1
  50. package/core/ui/EditorToolbar/preview.tid +6 -0
  51. package/core/ui/PageTemplate.tid +1 -1
  52. package/core/ui/ViewTemplate/subtitle.tid +2 -5
  53. package/core/wiki/config/OfficialPluginLibrary.tid +1 -1
  54. package/core/wiki/macros/colour-picker.tid +6 -6
  55. package/core/wiki/macros/image-picker.tid +5 -5
  56. package/core/wiki/macros/list.tid +95 -78
  57. package/core/wiki/macros/tabs.tid +9 -1
  58. package/core/wiki/macros/tag-picker.tid +2 -2
  59. package/core/wiki/macros/tag.tid +2 -1
  60. package/core/wiki/macros/toc.tid +2 -2
  61. package/editions/de-AT/tiddlers/HelloThere.tid +2 -2
  62. package/editions/de-AT/tiddlers/community/Fur_Entwickler.tid +1 -1
  63. package/editions/de-AT-server/tiddlers/system/favicon.png +0 -0
  64. package/editions/{es-ES-server/tiddlers/system/favicon.ico.meta → de-AT-server/tiddlers/system/favicon.png.meta} +1 -1
  65. package/editions/dev/tiddlers/images/favicon.png +0 -0
  66. package/editions/{de-AT-server/tiddlers/system/favicon.ico.meta → dev/tiddlers/images/favicon.png.meta} +1 -1
  67. package/editions/dev/tiddlers/new/HookMechanism.tid +28 -3
  68. package/editions/empty/tiddlywiki.info +5 -2
  69. package/editions/es-ES/tiddlers/Forums.tid +4 -5
  70. package/editions/es-ES/tiddlers/HelloThere.tid +2 -2
  71. package/editions/es-ES/tiddlers/Typography.tid +1 -1
  72. package/editions/es-ES/tiddlers/images/favicon.png +0 -0
  73. package/editions/{dev/tiddlers/images/favicon.ico.meta → es-ES/tiddlers/images/favicon.png.meta} +1 -1
  74. package/editions/es-ES/tiddlers/images/green_favicon.png +0 -0
  75. package/editions/es-ES/tiddlers/images/{green_favicon.ico.meta → green_favicon.png.meta} +1 -1
  76. package/editions/es-ES-server/tiddlers/system/favicon.png +0 -0
  77. package/editions/{es-ES/tiddlers/images/favicon.ico.meta → es-ES-server/tiddlers/system/favicon.png.meta} +1 -1
  78. package/editions/fr-FR/tiddlers/images/favicon.png +0 -0
  79. package/editions/fr-FR/tiddlers/images/favicon.png.meta +2 -0
  80. package/editions/fr-FR/tiddlers/images/green_favicon.png +0 -0
  81. package/editions/fr-FR/tiddlers/images/{green_favicon.ico.meta → green_favicon.png.meta} +1 -1
  82. package/editions/fr-FR-server/tiddlers/system/favicon.png +0 -0
  83. package/editions/fr-FR-server/tiddlers/system/favicon.png.meta +2 -0
  84. package/editions/highlightdemo/tiddlywiki.info +1 -1
  85. package/editions/ja-JP/tiddlers/images/favicon.png +0 -0
  86. package/editions/ja-JP/tiddlers/images/favicon.png.meta +2 -0
  87. package/editions/ja-JP/tiddlers/images/green_favicon.png +0 -0
  88. package/editions/ja-JP/tiddlers/images/{green_favicon.ico.meta → green_favicon.png.meta} +1 -1
  89. package/editions/katexdemo/tiddlywiki.info +1 -1
  90. package/editions/ko-KR/tiddlers/images/favicon.png +0 -0
  91. package/editions/ko-KR/tiddlers/images/favicon.png.meta +2 -0
  92. package/editions/ko-KR/tiddlers/images/green_favicon.png +0 -0
  93. package/editions/ko-KR/tiddlers/images/{green_favicon.ico.meta → green_favicon.png.meta} +1 -1
  94. package/editions/ko-KR-server/tiddlers/system/favicon.png +0 -0
  95. package/editions/ko-KR-server/tiddlers/system/favicon.png.meta +2 -0
  96. package/editions/pluginlibrary/tiddlywiki.info +2 -2
  97. package/editions/prerelease/tiddlers/{Release 5.3.2.tid → Release 5.3.3.tid } +23 -25
  98. package/editions/prerelease/tiddlers/system/PrereleaseLocalPluginLibrary.tid +1 -1
  99. package/editions/prerelease/tiddlers/system/PrereleaseOfficialPluginLibrary.tid +1 -1
  100. package/editions/prerelease/tiddlers/system/favicon.png +0 -0
  101. package/editions/prerelease/tiddlers/system/favicon.png.meta +2 -0
  102. package/editions/prerelease/tiddlers/system/temp-my-scroll-position.tid +3 -0
  103. package/editions/resumebuilder/tiddlywiki.info +1 -1
  104. package/editions/server/tiddlywiki.info +1 -1
  105. package/editions/server-external-js/tiddlywiki.info +1 -1
  106. package/editions/test/playwright.spec.js +25 -0
  107. package/editions/test/tiddlers/tests/data/conditionals/Basic.tid +26 -0
  108. package/editions/test/tiddlers/tests/data/conditionals/BlockMode.tid +37 -0
  109. package/editions/test/tiddlers/tests/data/conditionals/Else.tid +26 -0
  110. package/editions/test/tiddlers/tests/data/conditionals/Elseif.tid +32 -0
  111. package/editions/test/tiddlers/tests/data/conditionals/MissingEndIf.tid +26 -0
  112. package/editions/test/tiddlers/tests/data/conditionals/MultipleResults.tid +12 -0
  113. package/editions/test/tiddlers/tests/data/conditionals/Nested.tid +38 -0
  114. package/editions/test/tiddlers/tests/data/conditionals/NestedElseif.tid +60 -0
  115. package/editions/test/tiddlers/tests/data/list-widget/WithExplicitTemplates.tid +29 -0
  116. package/editions/test/tiddlers/tests/data/list-widget/WithExplicitTemplatesInBlockMode.tid +32 -0
  117. package/editions/test/tiddlers/tests/data/list-widget/WithExplicitTemplatesOverriddenByAttributes.tid +33 -0
  118. package/editions/test/tiddlers/tests/data/list-widget/WithJoinTemplate.tid +30 -0
  119. package/editions/test/tiddlers/tests/data/list-widget/WithJoinTemplateInBlockMode.tid +32 -0
  120. package/editions/test/tiddlers/tests/data/list-widget/WithLimit.tid +25 -0
  121. package/editions/test/tiddlers/tests/data/list-widget/WithMissingTemplate.tid +26 -0
  122. package/editions/test/tiddlers/tests/data/transclude/CustomWidget-CodeblockOverride-TextParser.tid +20 -0
  123. package/editions/test/tiddlers/tests/data/transclude/Variable-Refreshing.tid +27 -0
  124. package/editions/test/tiddlers/tests/data/transclude/Variable-Static.tid +15 -0
  125. package/editions/test/tiddlers/tests/data/widgets/DataAttributes/ButtonWidget-DataAttributes.tid +27 -0
  126. package/editions/test/tiddlers/tests/data/widgets/DataAttributes/CheckboxWidget-DataAttributes.tid +22 -0
  127. package/editions/test/tiddlers/tests/data/widgets/DataAttributes/DraggableWidget-DataAttributes.tid +27 -0
  128. package/editions/test/tiddlers/tests/data/widgets/DataAttributes/DroppableWidget-DataAttributes.tid +27 -0
  129. package/editions/test/tiddlers/tests/data/widgets/DataAttributes/LinkWidget-DataAttributes.tid +27 -0
  130. package/editions/test/tiddlers/tests/data/widgets/DataAttributes/OrderedStyleAttributes.tid +15 -0
  131. package/editions/test/tiddlers/tests/data/widgets/DataAttributes/SelectWidget-DataAttributes.tid +27 -0
  132. package/editions/test/tiddlers/tests/data/widgets/ElementWidgetEventAttributes.tid +15 -0
  133. package/editions/test/tiddlers/tests/data/widgets/ElementWidgetStyleAttributes.tid +15 -0
  134. package/editions/test/tiddlers/tests/test-filters.js +1 -0
  135. package/editions/test/tiddlers/tests/test-json-filters.js +40 -0
  136. package/editions/test/tiddlers/tests/test-utils.js +23 -0
  137. package/editions/test/tiddlers/tests/test-widget.js +62 -0
  138. package/editions/tw.org/tiddlers/$__favicon.ico.png +0 -0
  139. package/editions/tw.org/tiddlywiki.info +1 -1
  140. package/editions/tw5.com/tiddlers/_tw_shared/favicons/classic.tiddlywiki.com.png +0 -0
  141. package/editions/tw5.com/tiddlers/_tw_shared/favicons/{classic.tiddlywiki.com.ico.meta → classic.tiddlywiki.com.png.meta} +1 -1
  142. package/editions/tw5.com/tiddlers/_tw_shared/favicons/links.tiddlywiki.org.png +0 -0
  143. package/editions/tw5.com/tiddlers/_tw_shared/favicons/{links.tiddlywiki.org.ico.meta → links.tiddlywiki.org.png.meta} +1 -1
  144. package/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.dev.png +0 -0
  145. package/editions/tw5.com/tiddlers/_tw_shared/favicons/{tiddlywiki.com.dev.ico.meta → tiddlywiki.com.dev.png.meta} +1 -1
  146. package/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.png +0 -0
  147. package/editions/tw5.com/tiddlers/_tw_shared/favicons/{tiddlywiki.com.ico.meta → tiddlywiki.com.png.meta} +1 -1
  148. package/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.prerelease.png +0 -0
  149. package/editions/tw5.com/tiddlers/_tw_shared/favicons/{tiddlywiki.com.prerelease.ico.meta → tiddlywiki.com.prerelease.png.meta} +1 -1
  150. package/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.upgrade.png +0 -0
  151. package/editions/tw5.com/tiddlers/_tw_shared/favicons/{tiddlywiki.com.upgrade.ico.meta → tiddlywiki.com.upgrade.png.meta} +1 -1
  152. package/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.org.png +0 -0
  153. package/editions/tw5.com/tiddlers/about/Archive.tid +82 -0
  154. package/editions/tw5.com/tiddlers/community/Chinese Community.tid +20 -0
  155. package/editions/tw5.com/tiddlers/community/editions/Tidme by oflg.tid +16 -0
  156. package/editions/tw5.com/tiddlers/community/plugins/FSRS4TW by oflg.tid +10 -0
  157. package/editions/tw5.com/tiddlers/community/resources/_Timimi_ Extension and executable by Riz.tid +3 -1
  158. package/editions/tw5.com/tiddlers/concepts/Macros.tid +7 -3
  159. package/editions/tw5.com/tiddlers/concepts/Title List.tid +5 -1
  160. package/editions/tw5.com/tiddlers/filters/decodebase64 Operator.tid +6 -1
  161. package/editions/tw5.com/tiddlers/filters/encodebase64 Operator.tid +6 -1
  162. package/editions/tw5.com/tiddlers/filters/examples/jsonset.tid +59 -0
  163. package/editions/tw5.com/tiddlers/filters/examples/jsonstringify Operator (Examples).tid +7 -5
  164. package/editions/tw5.com/tiddlers/filters/examples/stringify_Operator_(Examples).tid +5 -3
  165. package/editions/tw5.com/tiddlers/filters/jsonextract.tid +8 -0
  166. package/editions/tw5.com/tiddlers/filters/jsonget.tid +8 -0
  167. package/editions/tw5.com/tiddlers/filters/jsonset.tid +64 -0
  168. package/editions/tw5.com/tiddlers/filters/jsonstringify Operator.tid +14 -15
  169. package/editions/tw5.com/tiddlers/filters/jsontype.tid +8 -0
  170. package/editions/tw5.com/tiddlers/filters/stringify_Operator.tid +12 -15
  171. package/editions/tw5.com/tiddlers/filters/syntax/Filter Expression.tid +1 -1
  172. package/editions/tw5.com/tiddlers/hellothere/HelloThere.tid +6 -1
  173. package/editions/tw5.com/tiddlers/howtos/Constructing JSON tiddlers.tid +3 -3
  174. package/editions/tw5.com/tiddlers/images/Favicon template.svg +296 -0
  175. package/editions/tw5.com/tiddlers/images/Favicon template.svg.meta +3 -0
  176. package/editions/tw5.com/tiddlers/images/New Release Banner.png +0 -0
  177. package/editions/tw5.com/tiddlers/images/favicon.png +0 -0
  178. package/editions/tw5.com/tiddlers/images/favicon.png.meta +2 -0
  179. package/editions/tw5.com/tiddlers/images/green_favicon.png +0 -0
  180. package/editions/tw5.com/tiddlers/images/green_favicon.png.meta +2 -0
  181. package/editions/tw5.com/tiddlers/macros/CoreMacros.tid +1 -1
  182. package/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-open-window.tid +12 -5
  183. package/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-permalink.tid +1 -1
  184. package/editions/tw5.com/tiddlers/pragmas/Pragma_ _whitespace.tid +7 -3
  185. package/editions/tw5.com/tiddlers/procedures/Procedure Definitions.tid +3 -1
  186. package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.0.tid +1 -0
  187. package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.1.tid +1 -0
  188. package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.10.tid +1 -0
  189. package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.11.tid +1 -0
  190. package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.12.tid +1 -0
  191. package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.13.tid +1 -0
  192. package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.14.tid +1 -0
  193. package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.15.tid +1 -0
  194. package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.16.tid +1 -0
  195. package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.17.tid +1 -0
  196. package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.18.tid +1 -0
  197. package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.19.tid +1 -0
  198. package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.2.tid +1 -0
  199. package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.20.tid +1 -0
  200. package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.21.tid +1 -0
  201. package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.22.tid +1 -0
  202. package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.23.tid +1 -0
  203. package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.3.tid +1 -0
  204. package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.4.tid +1 -0
  205. package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.5.tid +1 -0
  206. package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.6.tid +1 -0
  207. package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.7.tid +1 -0
  208. package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.8.tid +1 -0
  209. package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.9.tid +1 -0
  210. package/editions/tw5.com/tiddlers/releasenotes/Release 5.2.0.tid +1 -0
  211. package/editions/tw5.com/tiddlers/releasenotes/Release 5.2.1.tid +1 -0
  212. package/editions/tw5.com/tiddlers/releasenotes/Release 5.2.2.tid +1 -0
  213. package/editions/tw5.com/tiddlers/releasenotes/Release 5.2.3.tid +1 -0
  214. package/editions/tw5.com/tiddlers/releasenotes/Release 5.2.4.tid +1 -0
  215. package/editions/tw5.com/tiddlers/releasenotes/Release 5.2.5.tid +1 -0
  216. package/editions/tw5.com/tiddlers/releasenotes/Release 5.2.6.tid +1 -0
  217. package/editions/tw5.com/tiddlers/releasenotes/Release 5.2.7.tid +1 -0
  218. package/editions/tw5.com/tiddlers/releasenotes/Release 5.3.0.tid +1 -0
  219. package/editions/tw5.com/tiddlers/releasenotes/Release 5.3.1.tid +8 -1
  220. package/editions/tw5.com/tiddlers/releasenotes/Release 5.3.2.tid +184 -0
  221. package/editions/tw5.com/tiddlers/releasenotes/Releases.tid +3 -1
  222. package/editions/tw5.com/tiddlers/system/tw5.com-styles.tid +5 -0
  223. package/editions/tw5.com/tiddlers/widgets/BrowseWidget.tid +3 -1
  224. package/editions/tw5.com/tiddlers/widgets/ButtonWidget.tid +3 -1
  225. package/editions/tw5.com/tiddlers/widgets/CheckboxWidget.tid +3 -1
  226. package/editions/tw5.com/tiddlers/widgets/Custom Widgets.tid +3 -1
  227. package/editions/tw5.com/tiddlers/widgets/DraggableWidget.tid +3 -2
  228. package/editions/tw5.com/tiddlers/widgets/DroppableWidget.tid +3 -1
  229. package/editions/tw5.com/tiddlers/widgets/GenesisWidget.tid +1 -1
  230. package/editions/tw5.com/tiddlers/widgets/ImageWidget.tid +2 -1
  231. package/editions/tw5.com/tiddlers/widgets/LinkWidget.tid +3 -1
  232. package/editions/tw5.com/tiddlers/widgets/ListWidget.tid +25 -2
  233. package/editions/tw5.com/tiddlers/widgets/RadioWidget.tid +3 -1
  234. package/editions/tw5.com/tiddlers/widgets/RangeWidget.tid +3 -1
  235. package/editions/tw5.com/tiddlers/widgets/ScrollableWidget.tid +27 -2
  236. package/editions/tw5.com/tiddlers/widgets/SelectWidget.tid +4 -1
  237. package/editions/tw5.com/tiddlers/widgets/SetWidget.tid +17 -1
  238. package/editions/tw5.com/tiddlers/widgets/TranscludeWidget.tid +2 -2
  239. package/editions/tw5.com/tiddlers/wikitext/Conditional Shortcut Syntax.tid +62 -0
  240. package/editions/tw5.com/tiddlers/wikitext/Transclusion and Substitution.tid +3 -3
  241. package/editions/tw5.com/tiddlywiki.info +9 -3
  242. package/editions/tw5.com-server/tiddlers/system/tiddlywiki.com.server.png +0 -0
  243. package/editions/tw5.com-server/tiddlers/system/tiddlywiki.com.server.png.meta +2 -0
  244. package/editions/zh-Hans/tiddlers/images/favicon.png +0 -0
  245. package/editions/zh-Hans/tiddlers/images/favicon.png.meta +2 -0
  246. package/editions/zh-Hans/tiddlers/images/green_favicon.png +0 -0
  247. package/editions/zh-Hans/tiddlers/images/green_favicon.png.meta +2 -0
  248. package/editions/zh-Hant/tiddlers/images/favicon.png +0 -0
  249. package/editions/zh-Hant/tiddlers/images/favicon.png.meta +2 -0
  250. package/editions/zh-Hant/tiddlers/images/green_favicon.png +0 -0
  251. package/editions/zh-Hant/tiddlers/images/green_favicon.png.meta +2 -0
  252. package/languages/de-DE/Exporters.multids +1 -1
  253. package/languages/de-DE/Help/commands.tid +2 -2
  254. package/languages/de-DE/Help/server.tid +1 -1
  255. package/languages/de-DE/Types/image_x-icon.tid +1 -1
  256. package/languages/es-ES/Buttons.multids +2 -0
  257. package/languages/es-ES/Fields.multids +4 -0
  258. package/languages/es-ES/Help/listen.tid +1 -1
  259. package/languages/es-ES/Help/savewikifolder.tid +16 -1
  260. package/languages/es-ES/Help/server.tid +1 -1
  261. package/languages/es-ES/Misc.multids +3 -0
  262. package/languages/es-ES/SiteTitle.tid +1 -1
  263. package/languages/pl-PL/Exporters.multids +1 -1
  264. package/languages/pl-PL/Help/commands.tid +1 -1
  265. package/languages/pl-PL/Help/savewikifolder.tid +3 -1
  266. package/languages/pl-PL/Help/server.tid +1 -1
  267. package/languages/zh-Hans/Exporters.multids +1 -1
  268. package/languages/zh-Hans/Help/commands.tid +1 -1
  269. package/languages/zh-Hans/Help/server.tid +1 -1
  270. package/languages/zh-Hans/Types/image_svg_xml.tid +1 -1
  271. package/languages/zh-Hans/Types/image_x-icon.tid +1 -1
  272. package/languages/zh-Hant/Exporters.multids +1 -1
  273. package/languages/zh-Hant/Help/commands.tid +1 -1
  274. package/languages/zh-Hant/Help/server.tid +1 -1
  275. package/languages/zh-Hant/Types/image_svg_xml.tid +1 -1
  276. package/languages/zh-Hant/Types/image_x-icon.tid +1 -1
  277. package/licenses/cla-individual.md +10 -0
  278. package/package.json +4 -1
  279. package/playwright.config.js +46 -0
  280. package/plugins/tiddlywiki/codemirror/styles.tid +5 -0
  281. package/plugins/tiddlywiki/comments/styles.tid +8 -8
  282. package/plugins/tiddlywiki/dynannotate/docs/readme.tid +1 -0
  283. package/plugins/tiddlywiki/dynannotate/modules/dynannotate.js +28 -27
  284. package/plugins/tiddlywiki/evernote/modules/enex-deserializer.js +82 -23
  285. package/plugins/tiddlywiki/evernote/readme.tid +1 -0
  286. package/plugins/tiddlywiki/evernote/samples/sample-enex-with-image.xml.enex +2 -2
  287. package/plugins/tiddlywiki/jasmine/run-wiki-based-tests.js +1 -1
  288. package/plugins/tiddlywiki/qrcode/barcodereader.js +90 -0
  289. package/plugins/tiddlywiki/qrcode/docs/barcodereader.tid +44 -0
  290. package/plugins/tiddlywiki/qrcode/{doc/usage.tid → docs/makeqr.tid} +4 -4
  291. package/plugins/tiddlywiki/qrcode/docs.tid +3 -0
  292. package/plugins/tiddlywiki/qrcode/{MakeContactQR.tid → examples/make/MakeContactQR.tid} +1 -1
  293. package/plugins/tiddlywiki/qrcode/{MakeGenericQR.tid → examples/make/MakeGenericQR.tid} +1 -1
  294. package/plugins/tiddlywiki/qrcode/{MakeWifiQR.tid → examples/make/MakeWifiQR.tid} +1 -1
  295. package/plugins/tiddlywiki/qrcode/examples/make/make.tid +5 -0
  296. package/plugins/tiddlywiki/qrcode/examples/read/BarCodeReader.tid +17 -0
  297. package/plugins/tiddlywiki/qrcode/examples/read/read.tid +5 -0
  298. package/plugins/tiddlywiki/qrcode/examples.tid +3 -0
  299. package/plugins/tiddlywiki/qrcode/files/html5-qrcode/LICENSE +201 -0
  300. package/plugins/tiddlywiki/qrcode/files/html5-qrcode/README.md +398 -0
  301. package/plugins/tiddlywiki/qrcode/files/html5-qrcode/html5-qrcode.min.js +1 -0
  302. package/plugins/tiddlywiki/qrcode/files/tiddlywiki.files +20 -4
  303. package/plugins/tiddlywiki/qrcode/makeqr.js +1 -1
  304. package/plugins/tiddlywiki/qrcode/plugin.info +1 -1
  305. package/plugins/tiddlywiki/qrcode/readme.tid +15 -0
  306. package/plugins/tiddlywiki/tiddlyweb/html-json-skinny-tiddler.tid +0 -1
  307. package/plugins/tiddlywiki/tiddlyweb/html-json-tiddler.tid +1 -2
  308. package/plugins/tiddlywiki/upgrade/UpgradeWizard.tid +2 -2
  309. package/plugins/tiddlywiki/upgrade/favicon.png +0 -0
  310. package/plugins/tiddlywiki/upgrade/favicon.png.meta +2 -0
  311. package/readme.md +1 -1
  312. package/themes/tiddlywiki/vanilla/base.tid +37 -7
  313. package/themes/tiddlywiki/vanilla/settings.multids +1 -1
  314. package/editions/de-AT-server/tiddlers/system/favicon.ico +0 -0
  315. package/editions/dev/tiddlers/images/favicon.ico +0 -0
  316. package/editions/es-ES/tiddlers/images/favicon.ico +0 -0
  317. package/editions/es-ES/tiddlers/images/green_favicon.ico +0 -0
  318. package/editions/es-ES-server/tiddlers/system/favicon.ico +0 -0
  319. package/editions/fr-FR/tiddlers/images/favicon.ico +0 -0
  320. package/editions/fr-FR/tiddlers/images/favicon.ico.meta +0 -2
  321. package/editions/fr-FR/tiddlers/images/green_favicon.ico +0 -0
  322. package/editions/fr-FR-server/tiddlers/system/favicon.ico +0 -0
  323. package/editions/fr-FR-server/tiddlers/system/favicon.ico.meta +0 -2
  324. package/editions/ja-JP/tiddlers/images/favicon.ico +0 -0
  325. package/editions/ja-JP/tiddlers/images/favicon.ico.meta +0 -2
  326. package/editions/ja-JP/tiddlers/images/green_favicon.ico +0 -0
  327. package/editions/ko-KR/tiddlers/images/favicon.ico +0 -0
  328. package/editions/ko-KR/tiddlers/images/favicon.ico.meta +0 -2
  329. package/editions/ko-KR/tiddlers/images/green_favicon.ico +0 -0
  330. package/editions/ko-KR-server/tiddlers/system/favicon.ico +0 -0
  331. package/editions/ko-KR-server/tiddlers/system/favicon.ico.meta +0 -2
  332. package/editions/prerelease/tiddlers/system/favicon.ico +0 -0
  333. package/editions/prerelease/tiddlers/system/favicon.ico.meta +0 -2
  334. package/editions/tw5.com/tiddlers/_tw_shared/favicons/classic.tiddlywiki.com.ico +0 -0
  335. package/editions/tw5.com/tiddlers/_tw_shared/favicons/links.tiddlywiki.org.ico +0 -0
  336. package/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.dev.ico +0 -0
  337. package/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.ico +0 -0
  338. package/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.prerelease.ico +0 -0
  339. package/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.upgrade.ico +0 -0
  340. package/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.org.ico +0 -0
  341. package/editions/tw5.com/tiddlers/community/editions/TiddlyMemo by oflg.tid +0 -16
  342. package/editions/tw5.com/tiddlers/community/tutorials/Install and run TiddlyWiki on a CentOS 6 VPS using Nginx.tid +0 -16
  343. package/editions/tw5.com/tiddlers/images/favicon.ico +0 -0
  344. package/editions/tw5.com/tiddlers/images/favicon.ico.meta +0 -2
  345. package/editions/tw5.com/tiddlers/images/green_favicon.ico +0 -0
  346. package/editions/tw5.com/tiddlers/images/green_favicon.ico.meta +0 -2
  347. package/editions/tw5.com-server/tiddlers/system/favicon.ico +0 -0
  348. package/editions/tw5.com-server/tiddlers/system/favicon.ico.meta +0 -2
  349. package/editions/zh-Hans/tiddlers/images/favicon.ico +0 -0
  350. package/editions/zh-Hans/tiddlers/images/favicon.ico.meta +0 -2
  351. package/editions/zh-Hans/tiddlers/images/green_favicon.ico +0 -0
  352. package/editions/zh-Hans/tiddlers/images/green_favicon.ico.meta +0 -2
  353. package/editions/zh-Hant/tiddlers/images/favicon.ico +0 -0
  354. package/editions/zh-Hant/tiddlers/images/favicon.ico.meta +0 -2
  355. package/editions/zh-Hant/tiddlers/images/green_favicon.ico +0 -0
  356. package/editions/zh-Hant/tiddlers/images/green_favicon.ico.meta +0 -2
  357. package/plugins/tiddlywiki/qrcode/doc/examples.tid +0 -3
  358. package/plugins/tiddlywiki/qrcode/doc/readme.tid +0 -13
  359. package/plugins/tiddlywiki/upgrade/favicon.ico +0 -0
  360. package/plugins/tiddlywiki/upgrade/favicon.ico.meta +0 -2
  361. /package/editions/tw5.com/tiddlers/_tw_shared/favicons/{tiddlywiki.org.ico.meta → tiddlywiki.org.png.meta} +0 -0
  362. /package/plugins/tiddlywiki/qrcode/files/{LICENSE → qrcode/LICENSE} +0 -0
  363. /package/plugins/tiddlywiki/qrcode/files/{README.md → qrcode/README.md} +0 -0
  364. /package/plugins/tiddlywiki/qrcode/files/{qrcode.js → qrcode/qrcode.js} +0 -0
@@ -0,0 +1,27 @@
1
+ title: Transclude/Variable/Refreshing
2
+ description: Transcluding and refreshing a function
3
+ type: text/vnd.tiddlywiki-multiple
4
+ tags: [[$:/tags/wiki-test-spec]]
5
+
6
+ title: Output
7
+
8
+ \function list-join(filter, sep:", ") [subfilter<filter>join<sep>]
9
+
10
+ <$tiddler tiddler="TestData">
11
+
12
+ <<list-join "[enlist{!!items}]">>
13
+
14
+ </$tiddler>
15
+
16
+ +
17
+ title: TestData
18
+
19
+
20
+ +
21
+ title: Actions
22
+
23
+ <$action-setfield $tiddler="TestData" items={{{ [range[10]join[ ]] }}}/>
24
+ +
25
+ title: ExpectedResult
26
+
27
+ <p>1, 2, 3, 4, 5, 6, 7, 8, 9, 10</p>
@@ -0,0 +1,15 @@
1
+ title: Transclude/Variable/Static
2
+ description: Transcluding a function
3
+ type: text/vnd.tiddlywiki-multiple
4
+ tags: [[$:/tags/wiki-test-spec]]
5
+
6
+ title: Output
7
+ items: 1 2 3 4 5 6 7 8 9 10
8
+
9
+ \function list-join(filter, sep:", ") [subfilter<filter>join<sep>]
10
+
11
+ <<list-join "[enlist{!!items}]">>
12
+ +
13
+ title: ExpectedResult
14
+
15
+ <p>1, 2, 3, 4, 5, 6, 7, 8, 9, 10</p>
@@ -0,0 +1,27 @@
1
+ title: Widgets/DataAttributes/ButtonWidget
2
+ description: Data Attributes for ButtonWidget
3
+ type: text/vnd.tiddlywiki-multiple
4
+ tags: [[$:/tags/wiki-test-spec]]
5
+
6
+ title: Output
7
+
8
+ \whitespace trim
9
+ <$button tag="div" class="myclass" data-title="mytiddler" style.color="red" onclick="clicked">
10
+ my tiddler
11
+ </$button>
12
+ <$button tag="div" class="myclass" data-title={{Temp}} style.color={{{ [[Temp]get[color]] }}}>
13
+ hello
14
+ </$button>
15
+ +
16
+ title: Actions
17
+
18
+ <$action-setfield $tiddler="Temp" $field="text" $value="Title2" color="red"/>
19
+ +
20
+ title: Temp
21
+ color: black
22
+
23
+ Title1
24
+ +
25
+ title: ExpectedResult
26
+
27
+ <p><div class="myclass" data-title="mytiddler" style="color:red;">my tiddler</div><div class="myclass" data-title="Title2" style="color:red;">hello</div></p>
@@ -0,0 +1,22 @@
1
+ title: Widgets/DataAttributes/CheckboxWidget
2
+ description: Data Attributes for CheckboxWidget
3
+ type: text/vnd.tiddlywiki-multiple
4
+ tags: [[$:/tags/wiki-test-spec]]
5
+
6
+ title: Output
7
+
8
+ \whitespace trim
9
+ <$checkbox tag="done" data-title={{Temp}} style.color={{{ [[Temp]get[color]] }}} onclick="clicked"> Is it done?</$checkbox>
10
+ +
11
+ title: Actions
12
+
13
+ <$action-setfield $tiddler="Temp" $field="text" $value="Title2" color="red"/>
14
+ +
15
+ title: Temp
16
+ color: black
17
+
18
+ Title1
19
+ +
20
+ title: ExpectedResult
21
+
22
+ <p><label class="tc-checkbox "><input data-title="Title2" type="checkbox" style="color:red;"><span>Is it done?</span></label></p>
@@ -0,0 +1,27 @@
1
+ title: Widgets/DataAttributes/DraggableWidget
2
+ description: Data Attributes for DraggableWidget
3
+ type: text/vnd.tiddlywiki-multiple
4
+ tags: [[$:/tags/wiki-test-spec]]
5
+
6
+ title: Output
7
+
8
+ \whitespace trim
9
+ <$draggable tag="div" class="myclass" data-title="mytiddler" style.color="red" onclick="clicked">
10
+ my tiddler
11
+ </$draggable>
12
+ <$draggable tag="div" class="myclass" data-title={{Temp}} style.color={{{ [[Temp]get[color]] }}}>
13
+ hello
14
+ </$draggable>
15
+ +
16
+ title: Actions
17
+
18
+ <$action-setfield $tiddler="Temp" $field="text" $value="Title2" color="red"/>
19
+ +
20
+ title: Temp
21
+ color: black
22
+
23
+ Title1
24
+ +
25
+ title: ExpectedResult
26
+
27
+ <p><div class="myclass tc-draggable" data-title="mytiddler" draggable="true" style="color:red;">my tiddler</div><div class="myclass tc-draggable" data-title="Title2" draggable="true" style="color:red;">hello</div></p>
@@ -0,0 +1,27 @@
1
+ title: Widgets/DataAttributes/DroppableWidget
2
+ description: Data Attributes for DroppableWidget
3
+ type: text/vnd.tiddlywiki-multiple
4
+ tags: [[$:/tags/wiki-test-spec]]
5
+
6
+ title: Output
7
+
8
+ \whitespace trim
9
+ <$droppable tag="div" class="myclass" data-title="mytiddler" style.color="red" onclick="clicked">
10
+ my tiddler
11
+ </$droppable>
12
+ <$droppable tag="div" class="myclass" data-title={{Temp}} style.color={{{ [[Temp]get[color]] }}}>
13
+ hello
14
+ </$droppable>
15
+ +
16
+ title: Actions
17
+
18
+ <$action-setfield $tiddler="Temp" $field="text" $value="Title2" color="red"/>
19
+ +
20
+ title: Temp
21
+ color: black
22
+
23
+ Title1
24
+ +
25
+ title: ExpectedResult
26
+
27
+ <p><div class="myclass tc-droppable" data-title="mytiddler" style="color:red;">my tiddler</div><div class="myclass tc-droppable" data-title="Title2" style="color:red;">hello</div></p>
@@ -0,0 +1,27 @@
1
+ title: Widgets/DataAttributes/LinkWidget
2
+ description: Data Attributes for LinkWidget
3
+ type: text/vnd.tiddlywiki-multiple
4
+ tags: [[$:/tags/wiki-test-spec]]
5
+
6
+ title: Output
7
+
8
+ \whitespace trim
9
+ <$link data-id="mytiddler" style.color="red" to="Temp" onclick="clicked">
10
+ link to Temp
11
+ </$link>
12
+ <$link tag="button" data-id={{Temp}} style.color={{{ [[Temp]get[color]] }}} to="SomeTiddler">
13
+ some tiddler
14
+ </$link>
15
+ +
16
+ title: Actions
17
+
18
+ <$action-setfield $tiddler="Temp" $field="text" $value="Title2" color="red"/>
19
+ +
20
+ title: Temp
21
+ color: black
22
+
23
+ Title1
24
+ +
25
+ title: ExpectedResult
26
+
27
+ <p><a class="tc-tiddlylink tc-tiddlylink-resolves" data-id="mytiddler" href="#Temp" style="color:red;">link to Temp</a><button class="tc-tiddlylink tc-tiddlylink-missing" data-id="Title2" draggable="true" style="color:red;">some tiddler</button></p>
@@ -0,0 +1,15 @@
1
+ title: Widgets/DataAttributes/OrderedStyleAttributes
2
+ description: Ordered style attributes
3
+ type: text/vnd.tiddlywiki-multiple
4
+ tags: [[$:/tags/wiki-test-spec]]
5
+
6
+ title: Output
7
+
8
+ \whitespace trim
9
+ <div style="background:red;color:blue;" style.background="green">
10
+ hello
11
+ </div>
12
+ +
13
+ title: ExpectedResult
14
+
15
+ <p><div style="background:green;color:blue;">hello</div></p>
@@ -0,0 +1,27 @@
1
+ title: Widgets/DataAttributes/SelectWidget
2
+ description: Data Attributes for SelectWidget
3
+ type: text/vnd.tiddlywiki-multiple
4
+ tags: [[$:/tags/wiki-test-spec]]
5
+
6
+ title: Output
7
+
8
+ \whitespace trim
9
+ <$select tiddler='New Tiddler' field='text' default='Choose a new text' data-title={{Temp}} style.color={{{ [[Temp]get[color]] }}} onclick="clicked">
10
+ <option disabled>Choose a new text</option>
11
+ <option>A Tale of Two Cities</option>
12
+ <option>A New Kind of Science</option>
13
+ <option>The Dice Man</option>
14
+ </$select>
15
+ +
16
+ title: Actions
17
+
18
+ <$action-setfield $tiddler="Temp" $field="text" $value="Title2" color="red"/>
19
+ +
20
+ title: Temp
21
+ color: black
22
+
23
+ Title1
24
+ +
25
+ title: ExpectedResult
26
+
27
+ <p><select data-title="Title2" value="Choose a new text" style="color:red;"><option disabled="true">Choose a new text</option><option>A Tale of Two Cities</option><option>A New Kind of Science</option><option>The Dice Man</option></select></p>
@@ -0,0 +1,15 @@
1
+ title: Widgets/ElementWidgetEventAttributes
2
+ description: Element widget should not support event attributes starting with "on"
3
+ type: text/vnd.tiddlywiki-multiple
4
+ tags: [[$:/tags/wiki-test-spec]]
5
+
6
+ title: Output
7
+
8
+ \whitespace trim
9
+ <div class="hello" onclick="clicked">
10
+ TiddlyWiki
11
+ </div>
12
+ +
13
+ title: ExpectedResult
14
+
15
+ <p><div class="hello">TiddlyWiki</div></p>
@@ -0,0 +1,15 @@
1
+ title: Widgets/ElementWidgetStyleAttributes
2
+ description: Element widget should support style.* attributes
3
+ type: text/vnd.tiddlywiki-multiple
4
+ tags: [[$:/tags/wiki-test-spec]]
5
+
6
+ title: Output
7
+
8
+ \whitespace trim
9
+ <div class="hello" onclick="clicked" style.color="blue" style.color="red" style.background="yellow">
10
+ TiddlyWiki
11
+ </div>
12
+ +
13
+ title: ExpectedResult
14
+
15
+ <p><div class="hello" style="color:red;background:yellow;">TiddlyWiki</div></p>
@@ -365,6 +365,7 @@ Tests the filtering mechanism.
365
365
  expect(wiki.filterTiddlers("[sort[title]first[8]]").join(",")).toBe("$:/ShadowPlugin,$:/TiddlerTwo,a fourth tiddler,filter regexp test,has filter,hasList,one,Tiddler Three");
366
366
  expect(wiki.filterTiddlers("[sort[title]first[x]]").join(",")).toBe("$:/ShadowPlugin");
367
367
  expect(wiki.filterTiddlers("[sort[title]last[]]").join(",")).toBe("TiddlerOne");
368
+ expect(wiki.filterTiddlers("[sort[title]last[0]]").join(",")).toBe("");
368
369
  expect(wiki.filterTiddlers("[sort[title]last[2]]").join(",")).toBe("Tiddler Three,TiddlerOne");
369
370
  expect(wiki.filterTiddlers("[sort[title]last[8]]").join(",")).toBe("$:/TiddlerTwo,a fourth tiddler,filter regexp test,has filter,hasList,one,Tiddler Three,TiddlerOne");
370
371
  expect(wiki.filterTiddlers("[sort[title]last[x]]").join(",")).toBe("TiddlerOne");
@@ -53,6 +53,11 @@ describe("json filter tests", function() {
53
53
  expect(wiki.filterTiddlers("[{First}jsonget[d],[f],[2]]")).toEqual(["true"]);
54
54
  expect(wiki.filterTiddlers("[{First}jsonget[d],[f],[3]]")).toEqual(["false"]);
55
55
  expect(wiki.filterTiddlers("[{First}jsonget[d],[f],[4]]")).toEqual(["null"]);
56
+ expect(wiki.filterTiddlers("[{First}jsonget[d],[f],[-5]]")).toEqual(["five"]);
57
+ expect(wiki.filterTiddlers("[{First}jsonget[d],[f],[-4]]")).toEqual(["six"]);
58
+ expect(wiki.filterTiddlers("[{First}jsonget[d],[f],[-3]]")).toEqual(["true"]);
59
+ expect(wiki.filterTiddlers("[{First}jsonget[d],[f],[-2]]")).toEqual(["false"]);
60
+ expect(wiki.filterTiddlers("[{First}jsonget[d],[f],[-1]]")).toEqual(["null"]);
56
61
  });
57
62
 
58
63
  it("should support the jsonextract operator", function() {
@@ -70,6 +75,11 @@ describe("json filter tests", function() {
70
75
  expect(wiki.filterTiddlers("[{First}jsonextract[d],[f],[2]]")).toEqual(["true"]);
71
76
  expect(wiki.filterTiddlers("[{First}jsonextract[d],[f],[3]]")).toEqual(["false"]);
72
77
  expect(wiki.filterTiddlers("[{First}jsonextract[d],[f],[4]]")).toEqual(["null"]);
78
+ expect(wiki.filterTiddlers("[{First}jsonextract[d],[f],[-5]]")).toEqual(['"five"']);
79
+ expect(wiki.filterTiddlers("[{First}jsonextract[d],[f],[-4]]")).toEqual(['"six"']);
80
+ expect(wiki.filterTiddlers("[{First}jsonextract[d],[f],[-3]]")).toEqual(["true"]);
81
+ expect(wiki.filterTiddlers("[{First}jsonextract[d],[f],[-2]]")).toEqual(["false"]);
82
+ expect(wiki.filterTiddlers("[{First}jsonextract[d],[f],[-1]]")).toEqual(["null"]);
73
83
  });
74
84
 
75
85
  it("should support the jsonindexes operator", function() {
@@ -85,6 +95,11 @@ describe("json filter tests", function() {
85
95
  expect(wiki.filterTiddlers("[{First}jsonindexes[d],[f],[2]]")).toEqual([]);
86
96
  expect(wiki.filterTiddlers("[{First}jsonindexes[d],[f],[3]]")).toEqual([]);
87
97
  expect(wiki.filterTiddlers("[{First}jsonindexes[d],[f],[4]]")).toEqual([]);
98
+ expect(wiki.filterTiddlers("[{First}jsonindexes[d],[f],[-5]]")).toEqual([]);
99
+ expect(wiki.filterTiddlers("[{First}jsonindexes[d],[f],[-4]]")).toEqual([]);
100
+ expect(wiki.filterTiddlers("[{First}jsonindexes[d],[f],[-3]]")).toEqual([]);
101
+ expect(wiki.filterTiddlers("[{First}jsonindexes[d],[f],[-2]]")).toEqual([]);
102
+ expect(wiki.filterTiddlers("[{First}jsonindexes[d],[f],[-1]]")).toEqual([]);
88
103
  });
89
104
 
90
105
  it("should support the jsontype operator", function() {
@@ -101,6 +116,31 @@ describe("json filter tests", function() {
101
116
  expect(wiki.filterTiddlers("[{First}jsontype[d],[f],[2]]")).toEqual(["boolean"]);
102
117
  expect(wiki.filterTiddlers("[{First}jsontype[d],[f],[3]]")).toEqual(["boolean"]);
103
118
  expect(wiki.filterTiddlers("[{First}jsontype[d],[f],[4]]")).toEqual(["null"]);
119
+ expect(wiki.filterTiddlers("[{First}jsontype[d],[f],[-5]]")).toEqual(["string"]);
120
+ expect(wiki.filterTiddlers("[{First}jsontype[d],[f],[-4]]")).toEqual(["string"]);
121
+ expect(wiki.filterTiddlers("[{First}jsontype[d],[f],[-3]]")).toEqual(["boolean"]);
122
+ expect(wiki.filterTiddlers("[{First}jsontype[d],[f],[-2]]")).toEqual(["boolean"]);
123
+ expect(wiki.filterTiddlers("[{First}jsontype[d],[f],[-1]]")).toEqual(["null"]);
124
+ });
125
+
126
+ it("should support the jsonset operator", function() {
127
+ expect(wiki.filterTiddlers("[jsonset[a],[aa]]")).toEqual(['"First"','"Second"','"Third"']);
128
+ expect(wiki.filterTiddlers("[{First}jsonset[]]")).toEqual(['{"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,null]}}']);
129
+ expect(wiki.filterTiddlers("[{First}jsonset[],[Antelope]]")).toEqual(['"Antelope"']);
130
+ expect(wiki.filterTiddlers("[{First}jsonset:number[],[not a number]]")).toEqual(['0']);
131
+ expect(wiki.filterTiddlers("[{First}jsonset[id],[Antelope]]")).toEqual(['{"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,null]},"id":"Antelope"}']);
132
+ expect(wiki.filterTiddlers("[{First}jsonset:notatype[id],[Antelope]]")).toEqual(['{"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,null]},"id":"Antelope"}']);
133
+ expect(wiki.filterTiddlers("[{First}jsonset:boolean[id],[false]]")).toEqual(['{"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,null]},"id":false}']);
134
+ expect(wiki.filterTiddlers("[{First}jsonset:boolean[id],[Antelope]]")).toEqual(['{"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,null]}}']);
135
+ expect(wiki.filterTiddlers("[{First}jsonset:number[id],[42]]")).toEqual(['{"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,null]},"id":42}']);
136
+ expect(wiki.filterTiddlers("[{First}jsonset:null[id]]")).toEqual(['{"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,null]},"id":null}']);
137
+ expect(wiki.filterTiddlers("[{First}jsonset:array[d],[f],[5]]")).toEqual(['{"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,null,[]]}}']);
138
+ expect(wiki.filterTiddlers("[{First}jsonset:object[d],[f],[5]]")).toEqual(['{"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,null,{}]}}']);
139
+ expect(wiki.filterTiddlers("[{First}jsonset:number[d],[f],[-1],[42]]")).toEqual(['{"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,42]}}']);
140
+ expect(wiki.filterTiddlers("[{First}jsonset[missing],[id],[Antelope]]")).toEqual(['{"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,null]}}']);
141
+ expect(wiki.filterTiddlers("[{First}jsonset:json[\"Antelope\"]]")).toEqual(['"Antelope"']);
142
+ expect(wiki.filterTiddlers("[{First}jsonset:json[id],[{\"a\":313}]]")).toEqual(['{"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,null]},"id":{"a":313}}']);
143
+ expect(wiki.filterTiddlers("[{First}jsonset:json[notjson]]")).toEqual(['{"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,null]}}']);
104
144
  });
105
145
 
106
146
  it("should support the format:json operator", function() {
@@ -48,6 +48,29 @@ describe("Utility tests", function() {
48
48
  expect($tw.utils.base64Decode($tw.utils.base64Encode(booksEmoji))).toBe(booksEmoji, "should round-trip correctly");
49
49
  });
50
50
 
51
+ it("should handle base64 encoding emojis in URL-safe variant", function() {
52
+ var booksEmoji = "📚";
53
+ expect($tw.utils.base64Encode(booksEmoji, false, true)).toBe("8J-Tmg==", "if surrogate pairs are correctly treated as a single code unit then base64 should be 8J+Tmg==");
54
+ expect($tw.utils.base64Decode("8J-Tmg==", false, true)).toBe(booksEmoji);
55
+ expect($tw.utils.base64Decode($tw.utils.base64Encode(booksEmoji, false, true), false, true)).toBe(booksEmoji, "should round-trip correctly");
56
+ });
57
+
58
+ it("should handle base64 encoding binary data", function() {
59
+ var binaryData = "\xff\xfe\xfe\xff";
60
+ var encoded = $tw.utils.base64Encode(binaryData,true);
61
+ expect(encoded).toBe("//7+/w==");
62
+ var decoded = $tw.utils.base64Decode(encoded,true);
63
+ expect(decoded).toBe(binaryData, "Binary data did not round-trip correctly");
64
+ });
65
+
66
+ it("should handle base64 encoding binary data in URL-safe variant", function() {
67
+ var binaryData = "\xff\xfe\xfe\xff";
68
+ var encoded = $tw.utils.base64Encode(binaryData,true,true);
69
+ expect(encoded).toBe("__7-_w==");
70
+ var decoded = $tw.utils.base64Decode(encoded,true,true);
71
+ expect(decoded).toBe(binaryData, "Binary data did not round-trip correctly");
72
+ });
73
+
51
74
  it("should handle stringifying a string array", function() {
52
75
  var str = $tw.utils.stringifyList;
53
76
  expect(str([])).toEqual("");
@@ -527,6 +527,68 @@ describe("Widget module", function() {
527
527
  expect(wrapper.children[0].children[15].sequenceNumber).toBe(53);
528
528
  });
529
529
 
530
+ var testListJoin = function(oldList, newList) {
531
+ return function() {
532
+ var wiki = new $tw.Wiki();
533
+ // Add some tiddlers
534
+ wiki.addTiddler({title: "Numbers", text: "", list: oldList});
535
+ var text = "<$list filter='[list[Numbers]]' variable='item' join=', '><<item>></$list>";
536
+ var widgetNode = createWidgetNode(parseText(text,wiki),wiki);
537
+ // Render the widget node to the DOM
538
+ var wrapper = renderWidgetNode(widgetNode);
539
+ // Test the rendering
540
+ expect(wrapper.innerHTML).toBe("<p>" + oldList.split(' ').join(', ') + "</p>");
541
+ // Change the list and ensure new rendering is still right
542
+ wiki.addTiddler({title: "Numbers", text: "", list: newList});
543
+ refreshWidgetNode(widgetNode,wrapper,["Numbers"]);
544
+ expect(wrapper.innerHTML).toBe("<p>" + newList.split(' ').join(', ') + "</p>");
545
+ }
546
+ }
547
+
548
+ it("the list widget with join should update correctly when empty list gets one item", testListJoin("", "1"));
549
+ it("the list widget with join should update correctly when empty list gets two items", testListJoin("", "1 2"));
550
+ it("the list widget with join should update correctly when single-item list is appended to", testListJoin("1", "1 2"));
551
+ it("the list widget with join should update correctly when single-item list is prepended to", testListJoin("1", "2 1"));
552
+ it("the list widget with join should update correctly when list is appended", testListJoin("1 2 3 4", "1 2 3 4 5"));
553
+ it("the list widget with join should update correctly when last item is removed", testListJoin("1 2 3 4", "1 2 3"));
554
+ it("the list widget with join should update correctly when first item is inserted", testListJoin("1 2 3 4", "0 1 2 3 4"));
555
+ it("the list widget with join should update correctly when first item is removed", testListJoin("1 2 3 4", "2 3 4"));
556
+ it("the list widget with join should update correctly when first two items are swapped", testListJoin("1 2 3 4", "2 1 3 4"));
557
+ it("the list widget with join should update correctly when last two items are swapped", testListJoin("1 2 3 4", "1 2 4 3"));
558
+ it("the list widget with join should update correctly when last item is moved to the front", testListJoin("1 2 3 4", "4 1 2 3"));
559
+ it("the list widget with join should update correctly when last item is moved to the middle", testListJoin("1 2 3 4", "1 4 2 3"));
560
+ it("the list widget with join should update correctly when first item is moved to the back", testListJoin("1 2 3 4", "2 3 4 1"));
561
+ it("the list widget with join should update correctly when middle item is moved to the back", testListJoin("1 2 3 4", "1 3 4 2"));
562
+ it("the list widget with join should update correctly when the last item disappears at the same time as other edits 1", testListJoin("1 3 4", "1 2 3"));
563
+ it("the list widget with join should update correctly when the last item disappears at the same time as other edits 2", testListJoin("1 3 4", "1 3 2"));
564
+ it("the list widget with join should update correctly when the last item disappears at the same time as other edits 3", testListJoin("1 3 4", "2 1 3"));
565
+ it("the list widget with join should update correctly when the last item disappears at the same time as other edits 4", testListJoin("1 3 4", "2 3 1"));
566
+ it("the list widget with join should update correctly when the last item disappears at the same time as other edits 5", testListJoin("1 3 4", "3 1 2"));
567
+ it("the list widget with join should update correctly when the last item disappears at the same time as other edits 6", testListJoin("1 3 4", "3 2 1"));
568
+
569
+ var testCounterLast = function(oldList, newList) {
570
+ return function() {
571
+ var wiki = new $tw.Wiki();
572
+ // Add some tiddlers
573
+ wiki.addTiddler({title: "Numbers", text: "", list: oldList});
574
+ var text = "<$list filter='[list[Numbers]]' variable='item' counter='c'><<item>><$text text={{{ [<c-last>match[no]then[, ]] }}} /></$list>";
575
+ var widgetNode = createWidgetNode(parseText(text,wiki),wiki);
576
+ // Render the widget node to the DOM
577
+ var wrapper = renderWidgetNode(widgetNode);
578
+ // Test the rendering
579
+ expect(wrapper.innerHTML).toBe("<p>" + oldList.split(' ').join(', ') + "</p>");
580
+ // Append a number
581
+ wiki.addTiddler({title: "Numbers", text: "", list: newList});
582
+ refreshWidgetNode(widgetNode,wrapper,["Numbers"]);
583
+ expect(wrapper.innerHTML).toBe("<p>" + newList.split(' ').join(', ') + "</p>");
584
+ }
585
+ }
586
+
587
+ it("the list widget with counter-last should update correctly when list is appended", testCounterLast("1 2 3 4", "1 2 3 4 5"));
588
+ it("the list widget with counter-last should update correctly when last item is removed", testCounterLast("1 2 3 4", "1 2 3"));
589
+ it("the list widget with counter-last should update correctly when first item is inserted", testCounterLast("1 2 3 4", "0 1 2 3 4"));
590
+ it("the list widget with counter-last should update correctly when first item is removed", testCounterLast("1 2 3 4", "2 3 4"));
591
+
530
592
  it("should deal with the list widget followed by other widgets", function() {
531
593
  var wiki = new $tw.Wiki();
532
594
  // Add some tiddlers
@@ -21,7 +21,7 @@
21
21
  "static": [
22
22
  "--render","$:/core/templates/static.template.html","static.html","text/plain",
23
23
  "--render","$:/core/templates/alltiddlers.template.html","alltiddlers.html","text/plain",
24
- "--render","[!is[system]]","[encodeuricomponent[]addprefix[static/]addsuffix[.html]]","text/plain","$:/core/templates/static.tiddler.html",
24
+ "--render","[!is[system]]","[encodeuricomponent[]addprefix[static/]addsuffix[.html]]","text/plain","$:/core/templates/static.tiddler.html",
25
25
  "--render","$:/core/templates/static.template.css","static/static.css","text/plain"]
26
26
  },
27
27
  "config": {
@@ -1,3 +1,3 @@
1
1
  title: $:/_tw_shared/favicons/classic.tiddlywiki.com
2
- type: image/x-icon
2
+ type: image/png
3
3
  tags: TiddlyWikiSitesMenu
@@ -1,3 +1,3 @@
1
1
  title: $:/_tw_shared/favicons/links.tiddlywiki.org
2
- type: image/x-icon
2
+ type: image/png
3
3
  tags: TiddlyWikiSitesMenu
@@ -1,3 +1,3 @@
1
1
  title: $:/_tw_shared/favicons/tiddlywiki.com.dev
2
- type: image/x-icon
2
+ type: image/png
3
3
  tags: TiddlyWikiSitesMenu
@@ -1,3 +1,3 @@
1
1
  title: $:/_tw_shared/favicons/tiddlywiki.com
2
- type: image/x-icon
2
+ type: image/png
3
3
  tags: TiddlyWikiSitesMenu
@@ -1,3 +1,3 @@
1
1
  title: $:/_tw_shared/favicons/tiddlywiki.com.prerelease
2
- type: image/x-icon
2
+ type: image/png
3
3
  tags: TiddlyWikiSitesMenu
@@ -1,3 +1,3 @@
1
1
  title: $:/_tw_shared/favicons/tiddlywiki.com.upgrade
2
- type: image/x-icon
2
+ type: image/png
3
3
  tags: TiddlyWikiSitesMenu
@@ -0,0 +1,82 @@
1
+ title: TiddlyWiki Archive
2
+ created: 20231005205623086
3
+ modified: 20231005210538879
4
+ tags: About
5
+
6
+ \procedure versions()
7
+ 5.1.0 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.1.8 5.1.9
8
+ 5.1.10 5.1.11 5.1.12 5.1.13 5.1.14 5.1.15 5.1.16 5.1.17 5.1.18 5.1.19
9
+ 5.1.20 5.1.21 5.1.22 5.1.23
10
+ 5.2.0 5.2.1 5.2.2 5.2.3 5.2.4 5.2.5 5.2.6 5.2.7
11
+ 5.3.0 5.3.1
12
+ \end
13
+
14
+ Older versions of TiddlyWiki are available in the [[archive|https://github.com/Jermolene/jermolene.github.io/tree/master/archive]]:
15
+
16
+ <table>
17
+ <tbody>
18
+ <tr>
19
+ <th>
20
+ Version
21
+ </th>
22
+ <th>
23
+ Released
24
+ </th>
25
+ <th>
26
+ Lifetime
27
+ </th>
28
+ <th>
29
+ Summary
30
+ </th>
31
+ <th>
32
+ Download
33
+ </th>
34
+ </tr>
35
+ <$list filter="[enlist<versions>reverse[]]" variable="version">
36
+ <$let
37
+ filename=`TiddlyWiki-$(version)$`
38
+ emptyFilename=`Empty-$(filename)$`
39
+ releaseTiddler={{{ [<version>addprefix[Release ]] }}}
40
+ releaseDate={{{ [<releaseTiddler>get[released]format:date[TIMESTAMP]] }}}
41
+ nextVersion={{{ [enlist<versions>after<version>] }}}
42
+ nextReleaseTiddler={{{ [<nextVersion>addprefix[Release ]] }}}
43
+ nextReleaseDate={{{ [<nextReleaseTiddler>get[released]format:date[TIMESTAMP]] }}}
44
+ lifetime={{{ [<nextReleaseDate>subtract<releaseDate>divide[86400000]add[0.5]fixed[0]] }}}
45
+ >
46
+ <tr>
47
+ <td>
48
+ <$link to=<<releaseTiddler>>>
49
+ <$text text=`v$(version)$`/>
50
+ </$link>
51
+ </td>
52
+ <td>
53
+ <$view tiddler=<<releaseTiddler>> field="released" format="date" template="DDth mmm YYYY"/>
54
+ </td>
55
+ <td>
56
+ <$list filter="[<lifetime>compare:number:lt[0]]" variable="ignore">
57
+ Current
58
+ </$list>
59
+ <$list filter="[<lifetime>compare:number:gteq[0]]" variable="ignore">
60
+ <$text text=<<lifetime>>/>
61
+ day<$list filter="[<lifetime>!compare:number:eq[1]]" variable="ignore">s</$list>
62
+ </$list>
63
+ </td>
64
+ <td>
65
+ <$transclude $tiddler=<<releaseTiddler>> $field="description" $format="inline">
66
+ (none)
67
+ </$transclude>
68
+ </td>
69
+ <td>
70
+ <a href={{{ [<filename>addprefix[https://tiddlywiki.com/archive/full/]]}}} rel="noopener noreferrer" target="_blank">
71
+ Complete
72
+ </a>
73
+ |
74
+ <a href={{{ [<emptyFilename>addprefix[https://tiddlywiki.com/archive/empty/]]}}} rel="noopener noreferrer" target="_blank">
75
+ Empty
76
+ </a>
77
+ </td>
78
+ </tr>
79
+ </$let>
80
+ </$list>
81
+ </tbody>
82
+ </table>
@@ -0,0 +1,20 @@
1
+ title: 中文社区 - Chinese Community
2
+ tags: Community
3
+
4
+ # A Chinese community tutorial program that people can edit together:
5
+ #* Main site: [ext[https://tw-cn.netlify.app/]]
6
+ #* Accelerated access: [ext[https://tw-cn.cpolar.top/]]
7
+ #* Alternate: [ext[https://tiddly-wiki-chinese-tutorial.vercel.app]]
8
+ # Tiddlywiki Chinese Chat Forum: [ext[https://talk.tidgi.fun/topic/6]]
9
+ # Chinese translation of Tiddlywiki official website [ext[https://bramchen.github.io/tw5-docs/zh-Hans/]]
10
+ # The best Chinese introductory tutorial for newbies [ext[https://keatonlao.github.io/tiddlywiki-xp/]]
11
+
12
+ ---
13
+
14
+ # 大家可以一起编辑的中文社区教程项目:
15
+ #* 主站:[ext[https://tw-cn.netlify.app/]]
16
+ #* 加速访问:[ext[https://tw-cn.cpolar.top/]]
17
+ #* 备用:[ext[https://tiddly-wiki-chinese-tutorial.vercel.app]]
18
+ # 太微中文交流论坛:[ext[https://talk.tidgi.fun/topic/6]]
19
+ # 太微官网汉化版:[ext[https://bramchen.github.io/tw5-docs/zh-Hans/]]
20
+ # 最适合新手的中文入门教程:[ext[https://keatonlao.github.io/tiddlywiki-xp/]]
@@ -0,0 +1,16 @@
1
+ created: 20220417010615742
2
+ modified: 20231005060241771
3
+ tags: [[Community Editions]]
4
+ title: Tidme by oflg
5
+ type: text/vnd.tiddlywiki
6
+ url: https://github.com/oflg/Tidme
7
+
8
+ Lifelong knowledge, deep in Mind.
9
+
10
+ {{!!url}}
11
+
12
+ Tidme uses advanced [[Incremental Learning|https://help.supermemo.org/wiki/Incremental_learning]] concepts to make it your powerful second brain for acquiring lifelong knowledge.
13
+
14
+ * Read Articles like SuperMemo
15
+ * Learn languages like LingQ
16
+ * Memory Notes like Anki