tiddlywiki 5.2.3 → 5.2.5

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 (412) hide show
  1. package/bin/build-site.sh +11 -2
  2. package/bin/test.sh +1 -0
  3. package/boot/boot.js +9 -6
  4. package/core/images/layout-button.tid +4 -0
  5. package/core/images/mastodon.tid +6 -0
  6. package/core/language/en-GB/Buttons.multids +4 -0
  7. package/core/language/en-GB/ControlPanel.multids +3 -3
  8. package/core/language/en-GB/Fields.multids +2 -2
  9. package/core/language/en-GB/GettingStarted.tid +4 -3
  10. package/core/language/en-GB/Help/commands.tid +18 -0
  11. package/core/language/en-GB/Misc.multids +1 -0
  12. package/core/modules/commands/commands.js +42 -0
  13. package/core/modules/editor/engines/framed.js +12 -1
  14. package/core/modules/editor/factory.js +2 -2
  15. package/core/modules/filters/format/json.js +35 -0
  16. package/core/modules/filters/is/variable.js +2 -2
  17. package/core/modules/filters/json-ops.js +186 -0
  18. package/core/modules/filters/variables.js +9 -3
  19. package/core/modules/filters.js +15 -6
  20. package/core/modules/keyboard.js +13 -1
  21. package/core/modules/parsers/csvparser.js +25 -17
  22. package/core/modules/parsers/wikiparser/rules/macrodef.js +1 -1
  23. package/core/modules/parsers/wikiparser/rules/parsermode.js +68 -0
  24. package/core/modules/parsers/wikiparser/rules/styleinline.js +3 -3
  25. package/core/modules/parsers/wikiparser/wikiparser.js +4 -2
  26. package/core/modules/server/routes/put-tiddler.js +10 -0
  27. package/core/modules/startup/startup.js +5 -1
  28. package/core/modules/utils/csv.js +101 -23
  29. package/core/modules/utils/dom/dom.js +17 -2
  30. package/core/modules/utils/dom/modal.js +6 -0
  31. package/core/modules/utils/dom/popup.js +69 -6
  32. package/core/modules/utils/fakedom.js +2 -2
  33. package/core/modules/utils/linked-list.js +79 -75
  34. package/core/modules/utils/logger.js +3 -1
  35. package/core/modules/utils/parsetree.js +20 -10
  36. package/core/modules/utils/utils.js +3 -0
  37. package/core/modules/widgets/action-deletefield.js +2 -2
  38. package/core/modules/widgets/action-popup.js +10 -8
  39. package/core/modules/widgets/button.js +7 -2
  40. package/core/modules/widgets/checkbox.js +12 -5
  41. package/core/modules/widgets/error.js +63 -0
  42. package/core/modules/widgets/genesis.js +108 -0
  43. package/core/modules/widgets/importvariables.js +4 -1
  44. package/core/modules/widgets/keyboard.js +4 -0
  45. package/core/modules/widgets/let.js +3 -5
  46. package/core/modules/widgets/reveal.js +11 -10
  47. package/core/modules/widgets/select.js +9 -0
  48. package/core/modules/widgets/transclude.js +3 -5
  49. package/core/modules/widgets/widget.js +44 -18
  50. package/core/palettes/Blanca.tid +2 -0
  51. package/core/palettes/Blue.tid +2 -0
  52. package/core/palettes/BrightMute.tid +2 -0
  53. package/core/palettes/ContrastDark.tid +2 -0
  54. package/core/palettes/ContrastLight.tid +2 -0
  55. package/core/palettes/CupertinoDark.tid +2 -0
  56. package/core/palettes/DarkPhotos.tid +2 -0
  57. package/core/palettes/DesertSand.tid +2 -0
  58. package/core/palettes/GruvBoxDark.tid +2 -0
  59. package/core/palettes/Nord.tid +2 -0
  60. package/core/palettes/Rocker.tid +2 -0
  61. package/core/palettes/SolarFlare.tid +2 -0
  62. package/core/palettes/SolarizedDark.tid +2 -0
  63. package/core/palettes/SolarizedLight.tid +2 -0
  64. package/core/palettes/SpartanDay.tid +2 -0
  65. package/core/palettes/SpartanNight.tid +2 -0
  66. package/core/palettes/Twilight.tid +2 -0
  67. package/core/palettes/Vanilla.tid +2 -0
  68. package/core/templates/external-js/save-all-external-js.tid +4 -2
  69. package/core/templates/external-js/save-offline-external-js.tid +4 -2
  70. package/core/templates/single.tiddler.window.tid +1 -1
  71. package/core/ui/Actions/new-image.tid +1 -7
  72. package/core/ui/AdvancedSearch/FilterButtons/delete.tid +3 -3
  73. package/core/ui/AdvancedSearch/FilterButtons/dropdown.tid +2 -2
  74. package/core/ui/ControlPanel/Basics/retain-story-ordering-button.tid +3 -0
  75. package/core/ui/ControlPanel/Basics.tid +3 -2
  76. package/core/ui/EditTemplate/Preview/output.tid +1 -1
  77. package/core/ui/EditTemplate/body/default.tid +1 -1
  78. package/core/ui/EditTemplate/fields.tid +12 -2
  79. package/core/ui/EditTemplate.tid +7 -2
  80. package/core/ui/ImportListing.tid +5 -5
  81. package/core/ui/KeyboardShortcuts/advanced-search.tid +1 -1
  82. package/core/ui/PageControls/layout.tid +15 -0
  83. package/core/ui/PageTemplate.tid +1 -4
  84. package/core/ui/SideBar/More.tid +2 -2
  85. package/core/ui/SwitcherModal.tid +1 -0
  86. package/core/ui/TagManager.tid +75 -63
  87. package/core/ui/ViewTemplate/unfold.tid +6 -2
  88. package/core/ui/ViewTemplate.tid +1 -1
  89. package/core/wiki/config/DefaultTiddlersRetainStory.tid +3 -0
  90. package/core/wiki/config/OfficialPluginLibrary.tid +1 -1
  91. package/core/wiki/config/PageControlButtons.multids +1 -0
  92. package/core/wiki/macros/list.tid +7 -7
  93. package/core/wiki/macros/timeline.tid +6 -9
  94. package/core/wiki/macros/toc.tid +12 -8
  95. package/core/wiki/tags/PageControls.tid +1 -1
  96. package/editions/de-AT/tiddlywiki.info +0 -1
  97. package/editions/de-AT-server/tiddlywiki.info +0 -1
  98. package/editions/de-DE/tiddlywiki.info +0 -1
  99. package/editions/dev/tiddlers/HelloThere.tid +2 -1
  100. package/editions/dev/tiddlers/How to run a local plugin library for testing.tid +42 -0
  101. package/editions/dev/tiddlers/javascript-widget-tutorial/Child widgets tutorial.tid +140 -0
  102. package/editions/dev/tiddlers/javascript-widget-tutorial/Do nothing widget demo.tid +22 -0
  103. package/editions/dev/tiddlers/javascript-widget-tutorial/Do nothing widget tutorial.tid +25 -0
  104. package/editions/dev/tiddlers/javascript-widget-tutorial/Hello World demo.tid +23 -0
  105. package/editions/dev/tiddlers/javascript-widget-tutorial/Hello World widget tutorial.tid +18 -0
  106. package/editions/dev/tiddlers/javascript-widget-tutorial/Javascript Widget Tutorial.tid +37 -0
  107. package/editions/dev/tiddlers/javascript-widget-tutorial/Undefined widget demo.tid +18 -0
  108. package/editions/dev/tiddlers/javascript-widget-tutorial/Undefined widget tutorial.tid +11 -0
  109. package/editions/dev/tiddlers/javascript-widget-tutorial/Widget attributes demo I.tid +48 -0
  110. package/editions/dev/tiddlers/javascript-widget-tutorial/Widget attributes demo II.tid +48 -0
  111. package/editions/dev/tiddlers/javascript-widget-tutorial/Widget attributes tutorial part I.tid +50 -0
  112. package/editions/dev/tiddlers/javascript-widget-tutorial/Widget attributes tutorial part II.tid +33 -0
  113. package/editions/dev/tiddlers/javascript-widget-tutorial/Widget refresh demo I.tid +44 -0
  114. package/editions/dev/tiddlers/javascript-widget-tutorial/Widget refresh demo II.tid +40 -0
  115. package/editions/dev/tiddlers/javascript-widget-tutorial/Widget refresh demo III.tid +50 -0
  116. package/editions/dev/tiddlers/javascript-widget-tutorial/Widget refresh tutorial part I.tid +47 -0
  117. package/editions/dev/tiddlers/javascript-widget-tutorial/Widget refresh tutorial part II.tid +37 -0
  118. package/editions/dev/tiddlers/javascript-widget-tutorial/Widget refresh tutorial part III.tid +26 -0
  119. package/editions/dev/tiddlers/javascript-widget-tutorial/domwidget.js +47 -0
  120. package/editions/dev/tiddlers/javascript-widget-tutorial/domwidget.js.meta +6 -0
  121. package/editions/dev/tiddlers/javascript-widget-tutorial/donothing.js +16 -0
  122. package/editions/dev/tiddlers/javascript-widget-tutorial/donothing.js.meta +6 -0
  123. package/editions/dev/tiddlers/javascript-widget-tutorial/hello-attribute-optimized.js +51 -0
  124. package/editions/dev/tiddlers/javascript-widget-tutorial/hello-attribute-optimized.js.meta +6 -0
  125. package/editions/dev/tiddlers/javascript-widget-tutorial/hello-attribute.js +47 -0
  126. package/editions/dev/tiddlers/javascript-widget-tutorial/hello-attribute.js.meta +6 -0
  127. package/editions/dev/tiddlers/javascript-widget-tutorial/hello.js +35 -0
  128. package/editions/dev/tiddlers/javascript-widget-tutorial/hello.js.meta +6 -0
  129. package/editions/dev/tiddlers/javascript-widget-tutorial/refreshcount.js +43 -0
  130. package/editions/dev/tiddlers/javascript-widget-tutorial/refreshcount.js.meta +6 -0
  131. package/editions/dev/tiddlers/javascript-widget-tutorial/tiddlerfield-norefresh.js +36 -0
  132. package/editions/dev/tiddlers/javascript-widget-tutorial/tiddlerfield-norefresh.js.meta +6 -0
  133. package/editions/dev/tiddlers/javascript-widget-tutorial/tiddlerfield.js +46 -0
  134. package/editions/dev/tiddlers/javascript-widget-tutorial/tiddlerfield.js.meta +6 -0
  135. package/editions/dev/tiddlywiki.info +2 -1
  136. package/editions/es-ES/tiddlers/GettingStarted_-_Chrome.tid +1 -1
  137. package/editions/es-ES/tiddlers/Saving_with_the_HTML5_fallback_saver.tid +1 -27
  138. package/editions/es-ES/tiddlers/Saving_with_the_HTML5_saver.tid +35 -0
  139. package/editions/fr-FR/tiddlers/$__editions_tw5.com_doc-macros.tid +1 -1
  140. package/editions/fr-FR/tiddlers/GettingStarted - Chrome.tid +1 -1
  141. package/editions/fr-FR/tiddlers/Saving with the HTML5 saver.tid +23 -0
  142. package/editions/fr-FR/tiddlers/saving/Saving with the HTML5 fallback saver.tid +1 -22
  143. package/editions/fr-FR/tiddlers/system/$__core_macros_list.tid +113 -0
  144. package/editions/fr-FR/tiddlers/system/$__core_macros_tag.tid +39 -0
  145. package/editions/fr-FR/tiddlers/system/$__core_ui_TagPickerTagTemplate.tid +25 -0
  146. package/editions/full/tiddlywiki.info +0 -1
  147. package/editions/introduction/tiddlywiki.info +0 -1
  148. package/editions/pluginlibrary/tiddlers/GettingStarted.tid +45 -0
  149. package/editions/pluginlibrary/tiddlers/PrereleaseLocalPluginLibrary.tid +6 -0
  150. package/editions/pluginlibrary/tiddlers/meta/SiteSubtitle.tid +3 -0
  151. package/editions/pluginlibrary/tiddlers/meta/SiteTitle.tid +3 -0
  152. package/editions/pluginlibrary/tiddlers/system/$__themes_tiddlywiki_vanilla_options_sidebarlayout.tid +3 -0
  153. package/editions/pluginlibrary/tiddlywiki.info +7 -0
  154. package/editions/prerelease/tiddlers/Release 5.2.6.tid +107 -0
  155. package/editions/prerelease/tiddlers/system/PrereleaseOfficialPluginLibrary.tid +1 -1
  156. package/editions/prerelease/tiddlers/system/TiddlyWiki Pre-release.tid +5 -1
  157. package/editions/test/tiddlers/tests/data/csv-cases.tid +282 -0
  158. package/editions/test/tiddlers/tests/data/filters/Recursion.tid +15 -0
  159. package/editions/test/tiddlers/tests/data/filters/fake-variables.tid +27 -0
  160. package/editions/test/tiddlers/tests/data/genesis-widget/DollarSigns.tid +14 -0
  161. package/editions/test/tiddlers/tests/data/genesis-widget/MultipleAttributes.tid +14 -0
  162. package/editions/test/tiddlers/tests/data/genesis-widget/Simple.tid +14 -0
  163. package/editions/test/tiddlers/tests/data/macros/NestedMacros.tid +36 -0
  164. package/editions/test/tiddlers/tests/data/pragmas/Parsermode.tid +36 -0
  165. package/editions/test/tiddlers/tests/data/transclude/Recursion.tid +13 -0
  166. package/editions/test/tiddlers/tests/modules/utils/test-csv.js +33 -0
  167. package/editions/test/tiddlers/tests/test-checkbox-widget.js +35 -1
  168. package/editions/test/tiddlers/tests/test-json-filters.js +112 -0
  169. package/editions/test/tiddlers/tests/test-linked-list.js +42 -2
  170. package/editions/test/tiddlers/tests/test-popup.js +63 -0
  171. package/editions/test/tiddlers/tests/test-utils.js +1 -0
  172. package/editions/test/tiddlers/tests/test-wikitext.js +16 -0
  173. package/editions/test/tiddlywiki.info +2 -1
  174. package/editions/translators/tiddlers/system/PageControlButtonsVisibility.multids +1 -0
  175. package/editions/translators/tiddlywiki.info +0 -1
  176. package/editions/tw.org/tiddlers/Code of Conduct.tid +4 -1
  177. package/editions/tw.org/tiddlers/Fundraising.tid +2 -2
  178. package/editions/tw5.com/tiddlers/Tables in WikiText CSS Utility Classes.tid +81 -0
  179. package/editions/tw5.com/tiddlers/_tw_shared/favicons/markplace.png +0 -0
  180. package/editions/tw5.com/tiddlers/_tw_shared/favicons/markplace.png.meta +3 -0
  181. package/editions/tw5.com/tiddlers/_tw_shared/sites/marketplace.tid +6 -0
  182. package/editions/tw5.com/tiddlers/_tw_shared/tags-TiddlyWikiSites.tid +1 -1
  183. package/editions/tw5.com/tiddlers/about/Funding TiddlyWiki.tid +19 -0
  184. package/editions/tw5.com/tiddlers/about/Open Collective.tid +14 -0
  185. package/editions/tw5.com/tiddlers/commands/CommandsCommand.tid +8 -0
  186. package/editions/tw5.com/tiddlers/commands/RenderTiddlerCommand.tid +2 -0
  187. package/editions/tw5.com/tiddlers/commands/RenderTiddlersCommand.tid +2 -0
  188. package/editions/tw5.com/tiddlers/commands/SaveTiddlerCommand.tid +2 -0
  189. package/editions/tw5.com/tiddlers/commands/SaveTiddlersCommand.tid +2 -0
  190. package/editions/tw5.com/tiddlers/community/plugins/GSD5.tid +2 -2
  191. package/editions/tw5.com/tiddlers/community/plugins/_JD Mobile Layout plugin_ by JD.tid +0 -1
  192. package/editions/tw5.com/tiddlers/community/resources/RegExp in Tiddlywiki by Mohammad.tid +1 -1
  193. package/editions/tw5.com/tiddlers/community/resources/_Dropboard_ by Reid Gould.tid +0 -1
  194. package/editions/tw5.com/tiddlers/community/resources/_Hacks_ by Thomas Elmiger.tid +0 -2
  195. package/editions/tw5.com/tiddlers/community/resources/_MathCell_ by Ste Wilson.tid +0 -1
  196. package/editions/tw5.com/tiddlers/community/resources/_TiddlyServer_ by Matt Lauber.tid +0 -1
  197. package/editions/tw5.com/tiddlers/community/resources/_X3DOM for TiddlyWiki 5_ by Jamal Wills.tid +0 -1
  198. package/editions/tw5.com/tiddlers/community/resources/_file-backups_ Extension Firefox by pmario.tid +1 -1
  199. package/editions/tw5.com/tiddlers/community/resources/_savetiddlers_ Extension for Chrome and Firefox by buggyj.tid +1 -1
  200. package/editions/tw5.com/tiddlers/concepts/CoordinateSystems.tid +42 -0
  201. package/editions/tw5.com/tiddlers/concepts/KeyboardShortcutTiddler.tid +2 -0
  202. package/editions/tw5.com/tiddlers/definitions/Federatial.tid +13 -1
  203. package/editions/tw5.com/tiddlers/definitions/HTML Block Elements.tid +9 -0
  204. package/editions/tw5.com/tiddlers/definitions/TiddlyWikiClassic.tid +3 -1
  205. package/editions/tw5.com/tiddlers/demonstrations/TableOfContentsMacro Selective Expandable Example custom icons.tid +16 -0
  206. package/editions/tw5.com/tiddlers/demonstrations/Tasks/TaskManagementExampleDraggable.tid +1 -1
  207. package/editions/tw5.com/tiddlers/features/DateFormat.tid +27 -3
  208. package/editions/tw5.com/tiddlers/features/JSON in TiddlyWiki.tid +1 -1
  209. package/editions/tw5.com/tiddlers/features/Modals.tid +3 -0
  210. package/editions/tw5.com/tiddlers/filters/examples/format Operator (Examples).tid +5 -2
  211. package/editions/tw5.com/tiddlers/filters/format.tid +5 -4
  212. package/editions/tw5.com/tiddlers/filters/jsonextract.tid +66 -0
  213. package/editions/tw5.com/tiddlers/filters/jsonget.tid +93 -0
  214. package/editions/tw5.com/tiddlers/filters/jsonindexes.tid +65 -0
  215. package/editions/tw5.com/tiddlers/filters/jsontype.tid +74 -0
  216. package/editions/tw5.com/tiddlers/gettingstarted/GettingStarted - Chrome.tid +2 -2
  217. package/editions/tw5.com/tiddlers/gettingstarted/GettingStarted.tid +3 -7
  218. package/editions/tw5.com/tiddlers/hellothere/HelloThere.tid +23 -22
  219. package/editions/tw5.com/tiddlers/hellothere/HelloThumbnail.tid +1 -1
  220. package/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Funding.tid +10 -0
  221. package/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Grok TiddlyWiki.tid +2 -0
  222. package/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Introduction Video.tid +2 -0
  223. package/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Latest Version.tid +9 -1
  224. package/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Marketplace.tid +10 -0
  225. package/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - TiddlyWikiLinks.tid +3 -1
  226. package/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail_-_Federatial.tid +11 -0
  227. package/editions/tw5.com/tiddlers/hiddensettings/Hidden Setting Default Story Ordering.tid +4 -0
  228. package/editions/tw5.com/tiddlers/hiddensettings/Hidden Setting Sync System Tiddlers From Server.tid +13 -0
  229. package/editions/tw5.com/tiddlers/hiddensettings/Hidden Setting SyncLogging.tid +13 -0
  230. package/editions/tw5.com/tiddlers/hiddensettings/Hidden Setting_ More Tabs Horizontal.tid +7 -0
  231. package/editions/tw5.com/tiddlers/howtos/How to create keyboard shortcuts.tid +2 -0
  232. package/editions/tw5.com/tiddlers/howtos/Reading data from JSON tiddlers.tid +10 -1
  233. package/editions/tw5.com/tiddlers/images/Federatial.png +0 -0
  234. package/editions/tw5.com/tiddlers/images/Federatial.png.meta +3 -0
  235. package/editions/tw5.com/tiddlers/images/Funding.png +0 -0
  236. package/editions/tw5.com/tiddlers/images/{TiddlyMap.png.meta → Funding.png.meta} +1 -1
  237. package/editions/tw5.com/tiddlers/images/Marketplace Banner.png +0 -0
  238. package/editions/tw5.com/tiddlers/images/Marketplace Banner.png.meta +3 -0
  239. package/editions/tw5.com/tiddlers/images/New Release Banner.png +0 -0
  240. package/editions/tw5.com/tiddlers/macros/ListMacro.tid +3 -1
  241. package/editions/tw5.com/tiddlers/macros/TableOfContentsMacro.tid +36 -2
  242. package/editions/tw5.com/tiddlers/marketplace/TiddlyWiki Marketplace.tid +18 -0
  243. package/editions/tw5.com/tiddlers/mechanisms/PopupMechanism.tid +1 -0
  244. package/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-modal.tid +4 -2
  245. package/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-new-tiddler.tid +1 -1
  246. package/editions/tw5.com/tiddlers/nodejs/Installing TiddlyWiki on Node.js.tid +2 -2
  247. package/editions/tw5.com/tiddlers/pragmas/Pragma_ _parsermode.tid +17 -0
  248. package/editions/tw5.com/tiddlers/releasenotes/Release 5.2.4.tid +144 -0
  249. package/editions/tw5.com/tiddlers/releasenotes/Release 5.2.5.tid +25 -0
  250. package/editions/tw5.com/tiddlers/releasenotes/Releases.tid +1 -1
  251. package/editions/tw5.com/tiddlers/saving/Emergency Tiddler Export.tid +1 -1
  252. package/editions/tw5.com/tiddlers/saving/Saving on TiddlyHost.tid +1 -1
  253. package/editions/tw5.com/tiddlers/saving/Saving on TiddlySpot.tid +0 -1
  254. package/editions/tw5.com/tiddlers/saving/Saving with Polly.tid +1 -0
  255. package/editions/tw5.com/tiddlers/saving/Saving with the HTML5 fallback saver.tid +3 -23
  256. package/editions/tw5.com/tiddlers/saving/Saving with the HTML5 saver.tid +27 -0
  257. package/editions/tw5.com/tiddlers/saving/Saving.tid +12 -5
  258. package/editions/tw5.com/tiddlers/saving/TiddlyBucket - Save to AWS or Google Storage.tid +15 -0
  259. package/editions/tw5.com/tiddlers/system/doc-macros.tid +1 -1
  260. package/editions/tw5.com/tiddlers/system/tw5.com-card-template.tid +1 -16
  261. package/editions/tw5.com/tiddlers/system/tw5.com-styles.tid +168 -40
  262. package/editions/tw5.com/tiddlers/system/version-macros.tid +3 -4
  263. package/editions/tw5.com/tiddlers/system/wikitext-macros.tid +43 -15
  264. package/editions/tw5.com/tiddlers/systemtags/SystemTag_ $__tags_ClassFilters_PageTemplate.tid +9 -0
  265. package/editions/tw5.com/tiddlers/systemtags/SystemTag_ $__tags_ClassFilters_TiddlerTemplate.tid +9 -0
  266. package/editions/tw5.com/tiddlers/systemtags/SystemTag_ $__tags_Filter.tid +2 -2
  267. package/editions/tw5.com/tiddlers/testimonials/Testimonials - Joe Armstrong.tid +8 -0
  268. package/editions/tw5.com/tiddlers/testimonials/Testimonials - Network World.tid +8 -0
  269. package/editions/tw5.com/tiddlers/testimonials/Testimonials - Product Hunt.tid +6 -0
  270. package/editions/tw5.com/tiddlers/webserver/Using the external JavaScript template.tid +10 -10
  271. package/editions/tw5.com/tiddlers/webserver/WebServer API_ Get All Tiddlers.tid +3 -1
  272. package/editions/tw5.com/tiddlers/widgets/ActionPopupWidget.tid +4 -3
  273. package/editions/tw5.com/tiddlers/widgets/ButtonWidget.tid +2 -1
  274. package/editions/tw5.com/tiddlers/widgets/DraggableWidget.tid +2 -1
  275. package/editions/tw5.com/tiddlers/widgets/ErrorWidget.tid +17 -0
  276. package/editions/tw5.com/tiddlers/widgets/EventCatcherWidget.tid +4 -3
  277. package/editions/tw5.com/tiddlers/widgets/GenesisWidget.tid +41 -0
  278. package/editions/tw5.com/tiddlers/widgets/LetWidget.tid +4 -1
  279. package/editions/tw5.com/tiddlers/widgets/ScrollableWidget.tid +1 -1
  280. package/editions/tw5.com/tiddlers/widgets/SelectWidget.tid +1 -0
  281. package/editions/tw5.com/tiddlers/wikitext/Macro Definitions in WikiText.tid +27 -4
  282. package/editions/tw5.com/tiddlers/wikitext/Styles and Classes in WikiText.tid +1 -1
  283. package/editions/tw5.com/tiddlers/wikitext/Table Classes Captions Headers and Footers.tid +20 -0
  284. package/editions/tw5.com/tiddlers/wikitext/Tables in WikiText.tid +3 -13
  285. package/editions/tw5.com/tiddlers/wikitext/Utility Classes.tid +20 -0
  286. package/editions/tw5.com/tiddlers/wikitext/parser/WikiText Parser Modes.tid +1 -1
  287. package/editions/twitter-archivist/tiddlers/DefaultTiddlers.tid +4 -0
  288. package/editions/twitter-archivist/tiddlers/HelloThere.tid +9 -0
  289. package/editions/twitter-archivist/tiddlers/SiteSubtitle.tid +3 -0
  290. package/editions/twitter-archivist/tiddlers/SiteTitle.tid +3 -0
  291. package/editions/twitter-archivist/tiddlywiki.info +16 -0
  292. package/languages/ar-PS/ControlPanel.multids +1 -1
  293. package/languages/ca-ES/ControlPanel.multids +1 -1
  294. package/languages/cs-CZ/ControlPanel.multids +1 -1
  295. package/languages/da-DK/ControlPanel.multids +1 -1
  296. package/languages/de-DE/Buttons.multids +5 -1
  297. package/languages/de-DE/ControlPanel.multids +1 -1
  298. package/languages/de-DE/Help/commands.tid +14 -0
  299. package/languages/de-DE/Misc.multids +1 -0
  300. package/languages/el-GR/ControlPanel.multids +1 -1
  301. package/languages/es-ES/Buttons.multids +91 -87
  302. package/languages/es-ES/ControlPanel.multids +19 -2
  303. package/languages/es-ES/Docs/PaletteColours.multids +2 -2
  304. package/languages/es-ES/EditTemplate.multids +3 -0
  305. package/languages/es-ES/Fields.multids +6 -5
  306. package/languages/es-ES/GettingStarted.tid +4 -3
  307. package/languages/es-ES/Help/commands.tid +18 -0
  308. package/languages/es-ES/Help/default.tid +4 -1
  309. package/languages/es-ES/Help/listen.tid +0 -1
  310. package/languages/es-ES/Help/render.tid +2 -2
  311. package/languages/es-ES/Import.multids +1 -1
  312. package/languages/es-ES/Misc.multids +2 -1
  313. package/languages/es-ES/SideBar.multids +1 -0
  314. package/languages/es-ES/Snippets/ListByTag.tid +1 -1
  315. package/languages/fa-IR/ControlPanel.multids +1 -1
  316. package/languages/fr-FR/Buttons.multids +2 -0
  317. package/languages/fr-FR/ControlPanel.multids +4 -4
  318. package/languages/fr-FR/Misc.multids +3 -2
  319. package/languages/hi-IN/ControlPanel.multids +1 -1
  320. package/languages/ia-IA/ControlPanel.multids +1 -1
  321. package/languages/it-IT/ControlPanel.multids +1 -1
  322. package/languages/ja-JP/ControlPanel.multids +9 -9
  323. package/languages/ko-KR/ControlPanel.multids +1 -1
  324. package/languages/nl-NL/ControlPanel.multids +1 -1
  325. package/languages/pl-PL/Buttons.multids +7 -3
  326. package/languages/pl-PL/ControlPanel.multids +26 -24
  327. package/languages/pl-PL/GettingStarted.tid +4 -3
  328. package/languages/pl-PL/Help/commands.tid +18 -0
  329. package/languages/pl-PL/Help/render.tid +2 -2
  330. package/languages/pl-PL/Misc.multids +1 -0
  331. package/languages/pl-PL/ThemeTweaks.multids +3 -3
  332. package/languages/pt-BR/ControlPanel.multids +1 -1
  333. package/languages/pt-PT/ControlPanel.multids +1 -1
  334. package/languages/ru-RU/ControlPanel.multids +1 -1
  335. package/languages/sk-SK/ControlPanel.multids +1 -1
  336. package/languages/sl-SI/ControlPanel.multids +1 -1
  337. package/languages/sv-SE/ControlPanel.multids +1 -1
  338. package/languages/zh-Hans/Buttons.multids +36 -32
  339. package/languages/zh-Hans/ControlPanel.multids +19 -19
  340. package/languages/zh-Hans/CoreReadMe.tid +1 -1
  341. package/languages/zh-Hans/Docs/ModuleTypes.multids +2 -2
  342. package/languages/zh-Hans/Docs/PaletteColours.multids +8 -8
  343. package/languages/zh-Hans/Fields.multids +7 -7
  344. package/languages/zh-Hans/Filters.multids +1 -1
  345. package/languages/zh-Hans/GettingStarted.tid +8 -6
  346. package/languages/zh-Hans/Help/commands.tid +18 -0
  347. package/languages/zh-Hans/Help/fetch.tid +6 -6
  348. package/languages/zh-Hans/Help/init.tid +1 -1
  349. package/languages/zh-Hans/Help/listen.tid +5 -5
  350. package/languages/zh-Hans/Help/makelibrary.tid +1 -1
  351. package/languages/zh-Hans/Help/savetiddlers.tid +1 -1
  352. package/languages/zh-Hans/Help/server.tid +6 -6
  353. package/languages/zh-Hans/Help/setfield.tid +3 -3
  354. package/languages/zh-Hans/Import.multids +1 -1
  355. package/languages/zh-Hans/Misc.multids +12 -11
  356. package/languages/zh-Hans/Search.multids +6 -6
  357. package/languages/zh-Hans/SiteSubtitle.tid +1 -1
  358. package/languages/zh-Hans/Snippets/ListByTag.tid +1 -1
  359. package/languages/zh-Hans/ThemeTweaks.multids +7 -7
  360. package/languages/zh-Hans/TiddlerInfo.multids +2 -2
  361. package/languages/zh-Hant/Buttons.multids +4 -0
  362. package/languages/zh-Hant/ControlPanel.multids +2 -2
  363. package/languages/zh-Hant/Fields.multids +2 -2
  364. package/languages/zh-Hant/GettingStarted.tid +4 -3
  365. package/languages/zh-Hant/Help/commands.tid +18 -0
  366. package/languages/zh-Hant/Misc.multids +1 -0
  367. package/licenses/cla-individual.md +6 -0
  368. package/package.json +1 -1
  369. package/plugins/tiddlywiki/bibtex/deserializer.js +2 -2
  370. package/plugins/tiddlywiki/codemirror/engine.js +4 -0
  371. package/plugins/tiddlywiki/dynannotate/docs/readme.tid +2 -2
  372. package/plugins/tiddlywiki/dynannotate/modules/dynannotate.js +4 -2
  373. package/plugins/tiddlywiki/help/tabs/Support.tid +6 -2
  374. package/plugins/tiddlywiki/jasmine/command.js +33 -0
  375. package/plugins/tiddlywiki/jasmine/help.tid +24 -0
  376. package/plugins/tiddlywiki/jasmine/jasmine-plugin.js +24 -18
  377. package/plugins/tiddlywiki/jasmine/readme.tid +31 -1
  378. package/plugins/tiddlywiki/jasmine/run-wiki-based-tests.js +93 -0
  379. package/plugins/tiddlywiki/jasmine/startup.js +37 -0
  380. package/plugins/tiddlywiki/translators/macros/translatableStringEditor.tid +6 -0
  381. package/plugins/tiddlywiki/translators/system/styles.tid +5 -0
  382. package/plugins/tiddlywiki/twitter-archivist/Twitter Archives.tid +5 -0
  383. package/plugins/tiddlywiki/twitter-archivist/archivist.js +319 -0
  384. package/plugins/tiddlywiki/twitter-archivist/configTiddlerInfoMode.tid +2 -0
  385. package/plugins/tiddlywiki/twitter-archivist/loadtwitterarchive.js +53 -0
  386. package/plugins/tiddlywiki/twitter-archivist/macros.tid +222 -0
  387. package/plugins/tiddlywiki/twitter-archivist/plugin.info +6 -0
  388. package/plugins/tiddlywiki/twitter-archivist/readme.tid +33 -0
  389. package/plugins/tiddlywiki/twitter-archivist/spec.tid +62 -0
  390. package/plugins/tiddlywiki/twitter-archivist/startup.js +38 -0
  391. package/plugins/tiddlywiki/twitter-archivist/styles.tid +47 -0
  392. package/plugins/tiddlywiki/twitter-archivist/template-archive.tid +3 -0
  393. package/plugins/tiddlywiki/twitter-archivist/template-hashtag.tid +3 -0
  394. package/plugins/tiddlywiki/twitter-archivist/template-tweet.tid +3 -0
  395. package/plugins/tiddlywiki/twitter-archivist/template-tweeter.tid +3 -0
  396. package/plugins/tiddlywiki/twitter-archivist/todo.tid +15 -0
  397. package/plugins/tiddlywiki/twitter-archivist/usage.tid +18 -0
  398. package/plugins/tiddlywiki/twitter-archivist/view-template-body-cascade.tid +8 -0
  399. package/plugins/tiddlywiki/upgrade/UpgradeWizard.tid +3 -3
  400. package/readme.md +1 -1
  401. package/themes/tiddlywiki/vanilla/base.tid +114 -9
  402. package/editions/fr-FR/tiddlers/$__core_ui_TagTemplate.tid +0 -33
  403. package/editions/prerelease/tiddlers/Release 5.2.4.tid +0 -59
  404. package/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Classic.tid +0 -6
  405. package/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Developers.tid +0 -7
  406. package/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Gentle Guide.tid +0 -11
  407. package/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - HelpingTiddlyWiki.tid +0 -7
  408. package/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - TWEUM2017.tid +0 -8
  409. package/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - TiddlyMap.tid +0 -6
  410. package/editions/tw5.com/tiddlers/images/Dev Thumbnail.jpg +0 -0
  411. package/editions/tw5.com/tiddlers/images/Dev Thumbnail.jpg.meta +0 -3
  412. package/editions/tw5.com/tiddlers/images/TiddlyMap.png +0 -0
@@ -0,0 +1,36 @@
1
+ title: Macros/NestedMacros
2
+ description: Nested Macros
3
+ type: text/vnd.tiddlywiki-multiple
4
+ tags: [[$:/tags/wiki-test-spec]]
5
+
6
+ title: Output
7
+
8
+ \whitespace trim
9
+
10
+ \define outer()
11
+ \whitespace trim
12
+
13
+ \define middle()
14
+ \whitespace trim
15
+
16
+ \define inner()
17
+ \whitespace trim
18
+
19
+ Jaguar
20
+
21
+ \end inner
22
+
23
+ <<inner>>
24
+
25
+ \end middle
26
+
27
+ <<middle>>
28
+
29
+ \end outer
30
+
31
+ <<outer>>
32
+
33
+ +
34
+ title: ExpectedResult
35
+
36
+ <p>Jaguar</p>
@@ -0,0 +1,36 @@
1
+ title: Pragmas/Parsermode
2
+ description: parsermode pragma
3
+ type: text/vnd.tiddlywiki-multiple
4
+ tags: [[$:/tags/wiki-test-spec]]
5
+
6
+ title: Output
7
+
8
+ {{AlwaysInline}}
9
+
10
+ {{AlwaysBlock}}
11
+
12
+ {{AlwaysInline}}{{AlwaysBlock}}
13
+
14
+ +
15
+ title: AlwaysInline
16
+
17
+ \parsermode inline
18
+ ! Not Heading
19
+
20
+ Text with ''bold''
21
+ +
22
+ title: AlwaysBlock
23
+
24
+ \parsermode block
25
+ ! Heading
26
+
27
+ Text with ''bold''
28
+ +
29
+ title: ExpectedResult
30
+
31
+ ! Not Heading
32
+
33
+ Text with <strong>bold</strong><h1 class="">Heading</h1><p>Text with <strong>bold</strong></p><p>! Not Heading
34
+
35
+ Text with <strong>bold</strong><h1 class="">Heading</h1><p>Text with <strong>bold</strong></p>
36
+ </p>
@@ -0,0 +1,13 @@
1
+ title: Transclude/Recursion
2
+ description: Transclusion recursion detection
3
+ type: text/vnd.tiddlywiki-multiple
4
+ tags: [[$:/tags/wiki-test-spec]]
5
+
6
+ title: Output
7
+
8
+ \whitespace trim
9
+ <$transclude $tiddler="Output"/>
10
+ +
11
+ title: ExpectedResult
12
+
13
+ <p><span class="tc-error">Recursive transclusion error in transclude widget</span></p>
@@ -0,0 +1,33 @@
1
+ /*\
2
+ title: modules/utils/test-csv.js
3
+ type: application/javascript
4
+ tags: [[$:/tags/test-spec]]
5
+
6
+ Tests the backlinks mechanism.
7
+
8
+ \*/
9
+ (function(){
10
+ /*jslint node: true, browser: true */
11
+ /*global $tw: false */
12
+ "use strict";
13
+
14
+ describe('CSV Parsing', function() {
15
+ var tid = $tw.wiki.getTiddler('csv-cases');
16
+ var testCases = JSON.parse(tid.fields.text);
17
+
18
+ $tw.utils.each(testCases, function(testCase) {
19
+ if (testCase.skip) {
20
+ return;
21
+ }
22
+ it("Test case: " + testCase.name, function() {
23
+ var parsedCsv = $tw.utils.parseCsvString(testCase.csv, testCase.options);
24
+ expect(parsedCsv).withContext("The generated CSV should match the expected one").toEqual(testCase.json);
25
+
26
+ var parsedCsvWithHeaders = $tw.utils.parseCsvStringWithHeader(testCase.csv, testCase.options);
27
+ expect(parsedCsvWithHeaders).withContext("The generated CSV with headers should match the expected one").toEqual(testCase.jsonWithHeaders);
28
+ });
29
+ })
30
+
31
+ });
32
+
33
+ })();
@@ -234,6 +234,38 @@ Tests the checkbox widget thoroughly.
234
234
  },
235
235
  ];
236
236
 
237
+ // https://github.com/Jermolene/TiddlyWiki5/issues/6871
238
+ const listModeTestsWithListField = (
239
+ listModeTests
240
+ .filter(data => data.widgetText.includes("listField='colors'"))
241
+ .map(data => {
242
+ const newData = {
243
+ ...data,
244
+ tiddlers: data.tiddlers.map(tiddler => ({...tiddler, list: tiddler.colors, colors: undefined})),
245
+ widgetText: data.widgetText.replace("listField='colors'", "listField='list'"),
246
+ expectedChange: {
247
+ "Colors": { list: data.expectedChange.Colors.colors.split(' ') }
248
+ },
249
+ }
250
+ return newData;
251
+ })
252
+ );
253
+ const listModeTestsWithTagsField = (
254
+ listModeTests
255
+ .filter(data => data.widgetText.includes("listField='colors'"))
256
+ .map(data => {
257
+ const newData = {
258
+ ...data,
259
+ tiddlers: data.tiddlers.map(tiddler => ({...tiddler, tags: tiddler.colors, colors: undefined})),
260
+ widgetText: data.widgetText.replace("listField='colors'", "listField='tags'"),
261
+ expectedChange: {
262
+ "Colors": { tags: data.expectedChange.Colors.colors.split(' ') }
263
+ },
264
+ }
265
+ return newData;
266
+ })
267
+ );
268
+
237
269
  const indexListModeTests = listModeTests.map(data => {
238
270
  const newData = {...data};
239
271
  const newName = data.testName.replace('list mode', 'index list mode');
@@ -453,6 +485,8 @@ Tests the checkbox widget thoroughly.
453
485
  const checkboxTestData = fieldModeTests.concat(
454
486
  indexModeTests,
455
487
  listModeTests,
488
+ listModeTestsWithListField,
489
+ listModeTestsWithTagsField,
456
490
  indexListModeTests,
457
491
  filterModeTests,
458
492
  );
@@ -495,7 +529,7 @@ Tests the checkbox widget thoroughly.
495
529
  for (const fieldName of Object.keys(change)) {
496
530
  const expectedValue = change[fieldName];
497
531
  const fieldValue = tiddler.fields[fieldName];
498
- expect(fieldValue).toBe(expectedValue);
532
+ expect(fieldValue).toEqual(expectedValue);
499
533
  }
500
534
  }
501
535
  })
@@ -0,0 +1,112 @@
1
+ /*\
2
+ title: test-json-filters.js
3
+ type: application/javascript
4
+ tags: [[$:/tags/test-spec]]
5
+
6
+ Tests the JSON filters and the format:json operator
7
+
8
+ \*/
9
+ (function(){
10
+
11
+ /* jslint node: true, browser: true */
12
+ /* eslint-env node, browser, jasmine */
13
+ /* eslint no-mixed-spaces-and-tabs: ["error", "smart-tabs"]*/
14
+ /* global $tw, require */
15
+ "use strict";
16
+
17
+ describe("json filter tests", function() {
18
+
19
+ var wiki = new $tw.Wiki();
20
+ var tiddlers = [{
21
+ title: "First",
22
+ text: '{"a":"one","b":"","c":1.618,"d": {"e": "four","f": ["five","six",true,false,null]}}',
23
+ type: "application/json"
24
+ },{
25
+ title: "Second",
26
+ text: '["une","deux","trois",["quatre","cinq"]]',
27
+ type: "application/json"
28
+ },{
29
+ title: "Third",
30
+ text: "This is not JSON",
31
+ type: "text/vnd.tiddlywiki"
32
+ }];
33
+ wiki.addTiddlers(tiddlers);
34
+
35
+ it("should support the getindex operator", function() {
36
+ expect(wiki.filterTiddlers("[{First}getindex[b]]")).toEqual([]);
37
+ });
38
+
39
+ it("should support the jsonget operator", function() {
40
+ expect(wiki.filterTiddlers("[{Third}jsonget[]]")).toEqual(["This is not JSON"]);
41
+ expect(wiki.filterTiddlers("[{Second}jsonget[]]")).toEqual(["une","deux","trois","quatre","cinq"]);
42
+ expect(wiki.filterTiddlers("[{First}jsonget[]]")).toEqual(["one","","1.618","four","five","six","true","false","null"]);
43
+ expect(wiki.filterTiddlers("[{First}jsonget[a]]")).toEqual(["one"]);
44
+ expect(wiki.filterTiddlers("[{First}jsonget[b]]")).toEqual([""]);
45
+ expect(wiki.filterTiddlers("[{First}jsonget[missing-property]]")).toEqual([]);
46
+ expect(wiki.filterTiddlers("[{First}jsonget[d]]")).toEqual(["four","five","six","true","false","null"]);
47
+ expect(wiki.filterTiddlers("[{First}jsonget[d],[e]]")).toEqual(["four"]);
48
+ expect(wiki.filterTiddlers("[{First}jsonget[d],[f]]")).toEqual(["five","six","true","false","null"]);
49
+ expect(wiki.filterTiddlers("[{First}jsonget[d],[f],[0]]")).toEqual(["five"]);
50
+ expect(wiki.filterTiddlers("[{First}jsonget[d],[f],[1]]")).toEqual(["six"]);
51
+ expect(wiki.filterTiddlers("[{First}jsonget[d],[f],[2]]")).toEqual(["true"]);
52
+ expect(wiki.filterTiddlers("[{First}jsonget[d],[f],[3]]")).toEqual(["false"]);
53
+ expect(wiki.filterTiddlers("[{First}jsonget[d],[f],[4]]")).toEqual(["null"]);
54
+ });
55
+
56
+ it("should support the jsonextract operator", function() {
57
+ expect(wiki.filterTiddlers("[{Third}jsonextract[]]")).toEqual(['"This is not JSON"']);
58
+ expect(wiki.filterTiddlers("[{First}jsonextract[]]")).toEqual(['{"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,null]}}']);
59
+ expect(wiki.filterTiddlers("[{First}jsonextract[a]]")).toEqual(['"one"']);
60
+ expect(wiki.filterTiddlers("[{First}jsonextract[b]]")).toEqual(['""']);
61
+ expect(wiki.filterTiddlers("[{First}jsonextract[missing-property]]")).toEqual([]);
62
+ expect(wiki.filterTiddlers("[{First}jsonextract[d]]")).toEqual(['{"e":"four","f":["five","six",true,false,null]}']);
63
+ expect(wiki.filterTiddlers("[{First}jsonextract[d]jsonextract[f]]")).toEqual(['["five","six",true,false,null]']);
64
+ expect(wiki.filterTiddlers("[{First}jsonextract[d],[e]]")).toEqual(['"four"']);
65
+ expect(wiki.filterTiddlers("[{First}jsonextract[d],[f]]")).toEqual(['["five","six",true,false,null]']);
66
+ expect(wiki.filterTiddlers("[{First}jsonextract[d],[f],[0]]")).toEqual(['"five"']);
67
+ expect(wiki.filterTiddlers("[{First}jsonextract[d],[f],[1]]")).toEqual(['"six"']);
68
+ expect(wiki.filterTiddlers("[{First}jsonextract[d],[f],[2]]")).toEqual(["true"]);
69
+ expect(wiki.filterTiddlers("[{First}jsonextract[d],[f],[3]]")).toEqual(["false"]);
70
+ expect(wiki.filterTiddlers("[{First}jsonextract[d],[f],[4]]")).toEqual(["null"]);
71
+ });
72
+
73
+ it("should support the jsonindexes operator", function() {
74
+ expect(wiki.filterTiddlers("[{Second}jsonindexes[]]")).toEqual(["0","1","2","3"]);
75
+ expect(wiki.filterTiddlers("[{First}jsonindexes[]]")).toEqual(["a","b","c","d"]);
76
+ expect(wiki.filterTiddlers("[{First}jsonindexes[a]]")).toEqual([]);
77
+ expect(wiki.filterTiddlers("[{First}jsonindexes[b]]")).toEqual([]);
78
+ expect(wiki.filterTiddlers("[{First}jsonindexes[d]]")).toEqual(["e","f"]);
79
+ expect(wiki.filterTiddlers("[{First}jsonindexes[d],[e]]")).toEqual([]);
80
+ expect(wiki.filterTiddlers("[{First}jsonindexes[d],[f]]")).toEqual(["0","1","2","3","4"]);
81
+ expect(wiki.filterTiddlers("[{First}jsonindexes[d],[f],[0]]")).toEqual([]);
82
+ expect(wiki.filterTiddlers("[{First}jsonindexes[d],[f],[1]]")).toEqual([]);
83
+ expect(wiki.filterTiddlers("[{First}jsonindexes[d],[f],[2]]")).toEqual([]);
84
+ expect(wiki.filterTiddlers("[{First}jsonindexes[d],[f],[3]]")).toEqual([]);
85
+ expect(wiki.filterTiddlers("[{First}jsonindexes[d],[f],[4]]")).toEqual([]);
86
+ });
87
+
88
+ it("should support the jsontype operator", function() {
89
+ expect(wiki.filterTiddlers("[{Third}jsontype[]]")).toEqual(["string"]);
90
+ expect(wiki.filterTiddlers("[{First}jsontype[]]")).toEqual(["object"]);
91
+ expect(wiki.filterTiddlers("[{First}jsontype[a]]")).toEqual(["string"]);
92
+ expect(wiki.filterTiddlers("[{First}jsontype[b]]")).toEqual(["string"]);
93
+ expect(wiki.filterTiddlers("[{First}jsontype[c]]")).toEqual(["number"]);
94
+ expect(wiki.filterTiddlers("[{First}jsontype[d]]")).toEqual(["object"]);
95
+ expect(wiki.filterTiddlers("[{First}jsontype[d],[e]]")).toEqual(["string"]);
96
+ expect(wiki.filterTiddlers("[{First}jsontype[d],[f]]")).toEqual(["array"]);
97
+ expect(wiki.filterTiddlers("[{First}jsontype[d],[f],[0]]")).toEqual(["string"]);
98
+ expect(wiki.filterTiddlers("[{First}jsontype[d],[f],[1]]")).toEqual(["string"]);
99
+ expect(wiki.filterTiddlers("[{First}jsontype[d],[f],[2]]")).toEqual(["boolean"]);
100
+ expect(wiki.filterTiddlers("[{First}jsontype[d],[f],[3]]")).toEqual(["boolean"]);
101
+ expect(wiki.filterTiddlers("[{First}jsontype[d],[f],[4]]")).toEqual(["null"]);
102
+ });
103
+
104
+ it("should support the format:json operator", function() {
105
+ expect(wiki.filterTiddlers("[{First}format:json[]]")).toEqual(["{\"a\":\"one\",\"b\":\"\",\"c\":1.618,\"d\":{\"e\":\"four\",\"f\":[\"five\",\"six\",true,false,null]}}"]);
106
+ expect(wiki.filterTiddlers("[{First}format:json[4]]")).toEqual(["{\n \"a\": \"one\",\n \"b\": \"\",\n \"c\": 1.618,\n \"d\": {\n \"e\": \"four\",\n \"f\": [\n \"five\",\n \"six\",\n true,\n false,\n null\n ]\n }\n}"]);
107
+ expect(wiki.filterTiddlers("[{First}format:json[ ]]")).toEqual(["{\n \"a\": \"one\",\n \"b\": \"\",\n \"c\": 1.618,\n \"d\": {\n \"e\": \"four\",\n \"f\": [\n \"five\",\n \"six\",\n true,\n false,\n null\n ]\n }\n}"]);
108
+ });
109
+
110
+ });
111
+
112
+ })();
@@ -59,10 +59,35 @@ describe("LinkedList class tests", function() {
59
59
  return pair;
60
60
  };
61
61
 
62
+ // This returns an array in reverse using a LinkList's prev member. Thus
63
+ // testing that prev is not corrupt. It doesn't exist in the LinkList module
64
+ // itself to avoid full support for it. Maybe that will change later.
65
+ function toReverseArray(list) {
66
+ var visits = Object.create(null),
67
+ value = list.prev.get(null),
68
+ array = [];
69
+ while(value !== null) {
70
+ array.push(value);
71
+ var prev = list.prev.get(value);
72
+ if(Array.isArray(prev)) {
73
+ var i = (visits[value] || prev.length) - 1;
74
+ visits[value] = i;
75
+ value = prev[i];
76
+ } else {
77
+ value = prev;
78
+ }
79
+ }
80
+ return array;
81
+ };
82
+
62
83
  // compares an array and a linked list to make sure they match up
63
84
  function compare(pair) {
64
- expect(pair.list.toArray()).toEqual(pair.array);
85
+ var forward = pair.list.toArray();
86
+ expect(forward).toEqual(pair.array);
65
87
  expect(pair.list.length).toBe(pair.array.length);
88
+ // Now we reverse the linked list and test it back to front, thus
89
+ // confirming that the list.prev isn't corrupt.
90
+ expect(toReverseArray(pair.list)).toEqual(forward.reverse());
66
91
  return pair;
67
92
  };
68
93
 
@@ -115,7 +140,7 @@ describe("LinkedList class tests", function() {
115
140
  // for list.last to be anything other than a string, but I
116
141
  // can't figure out how to make that corruption manifest a problem.
117
142
  // So I dig into its private members. Bleh...
118
- expect(typeof pair.list.last).toBe("string");
143
+ expect(typeof pair.list.prev.get(null)).toBe("string");
119
144
  });
120
145
 
121
146
  it("can pushTop value linked to by a repeat item", function() {
@@ -137,6 +162,21 @@ describe("LinkedList class tests", function() {
137
162
  compare(pushTop(newPair(["C", "X", "A", "A"]), "X")); // CAAX
138
163
  });
139
164
 
165
+ it("can remove all instances of a multi-instance value #7059", function() {
166
+ // Remove duplicate items when one or more items between the duplicates
167
+ // are not removed and the first of those duplicates is not the first item.
168
+ // These tests used to fail prior to the fix to #7059
169
+ compare(remove(newPair(["A", "A", "C", "B", "A"]), ["A", "C", "A", "A"])); // B
170
+ compare(remove(newPair(["A", "A", "C", "B", "A"]), ["C", "A", "A", "A"])); // B
171
+ compare(remove(newPair(["A", "A", "C", "B", "A"]), ["A", "A", "A"])); // CB
172
+ compare(remove(newPair(["A", "A", "C", "B", "A"]), ["A", "A", "A", "C"])); // B
173
+ compare(remove(newPair(["A", "A", "B", "A"]), ["A", "A", "A"])); // B
174
+ compare(remove(newPair(["A", "A", "B", "A"]), ["A", "A", "A", "B"])); //
175
+ compare(remove(newPair(["C", "A", "B", "A"]), ["C", "A", "A"])); // B
176
+ compare(remove(newPair(["C", "A", "B", "A", "C"]), ["C", "A", "A", "C"])); // B
177
+ compare(remove(newPair(["B", "A", "B", "A"]), ["B", "A", "A"])); // B
178
+ });
179
+
140
180
  it("can handle particularly nasty pushTop pitfall", function() {
141
181
  var pair = newPair(["A", "B", "A", "C"]);
142
182
  pushTop(pair, "A"); // BACA
@@ -0,0 +1,63 @@
1
+ /*\
2
+ title: test-popup.js
3
+ type: application/javascript
4
+ tags: [[$:/tags/test-spec]]
5
+
6
+ Tests some utility function of the Popup prototype.
7
+
8
+ \*/
9
+ (function(){
10
+
11
+ /*jslint node: true, browser: true */
12
+ /*global $tw: false */
13
+ "use strict";
14
+
15
+ describe("Popup tests", function() {
16
+
17
+ it("parseCoordinates should parse valid coordinates", function() {
18
+ var popup = require("$:/core/modules/utils/dom/popup.js");
19
+
20
+ expect(popup.parseCoordinates("(1,2,3,4)")).toEqual({absolute: false, left: 1, top: 2, width: 3, height: 4});
21
+ expect(popup.parseCoordinates("(1.5,2.6,3.7,4.8)")).toEqual({absolute: false, left: 1.5, top: 2.6, width: 3.7, height: 4.8});
22
+ expect(popup.parseCoordinates("@(1,2,3,4)")).toEqual({absolute: true, left: 1, top: 2, width: 3, height: 4});
23
+ expect(popup.parseCoordinates("@(1.5,2.6,3.7,4.8)")).toEqual({absolute: true, left: 1.5, top: 2.6, width: 3.7, height: 4.8});
24
+ });
25
+
26
+ it("parseCoordinates should not parse invalid coordinates", function() {
27
+ var popup = require("$:/core/modules/utils/dom/popup.js");
28
+
29
+ expect(popup.parseCoordinates("#(1,2,3,4)")).toEqual(false);
30
+ expect(popup.parseCoordinates("(1,2,3,4")).toEqual(false);
31
+ expect(popup.parseCoordinates("(1,2,3)")).toEqual(false);
32
+ });
33
+
34
+ it("buildCoordinates should create valid coordinates", function() {
35
+ var popup = require("$:/core/modules/utils/dom/popup.js");
36
+
37
+ var coordinates = {
38
+ left: 1.5,
39
+ top: 2.6,
40
+ width: 3.7,
41
+ height: 4.8
42
+ };
43
+
44
+ expect(popup.buildCoordinates(popup.coordinatePrefix.csOffsetParent, coordinates)).toEqual("(1.5,2.6,3.7,4.8)");
45
+ expect(popup.buildCoordinates(popup.coordinatePrefix.csAbsolute, coordinates)).toEqual("@(1.5,2.6,3.7,4.8)");
46
+ });
47
+
48
+ it("buildCoordinates should detect invalid input", function() {
49
+ var popup = require("$:/core/modules/utils/dom/popup.js");
50
+
51
+ var coordinates = {
52
+ left: "invalid",
53
+ top: 2.6,
54
+ width: 3.7,
55
+ height: 4.8
56
+ };
57
+
58
+ expect(popup.buildCoordinates(popup.coordinatePrefix.csOffsetParent, coordinates)).toEqual("(0,0,0,0)");
59
+ expect(popup.buildCoordinates("dummy", coordinates)).toEqual("(0,0,0,0)");
60
+ });
61
+ });
62
+
63
+ })();
@@ -78,6 +78,7 @@ describe("Utility tests", function() {
78
78
  expect(fds(d,"ddd hh mm ssss")).toBe("Sun 17 41 2828");
79
79
  expect(fds(d,"MM0DD")).toBe("1109");
80
80
  expect(fds(d,"MM0\\D\\D")).toBe("110DD");
81
+ expect(fds(d,"TIMESTAMP")).toBe(d.getTime().toString());
81
82
  const day = d.getUTCDate();
82
83
  const dayStr = ("" + day).padStart(2, '0');
83
84
  const hours = d.getUTCHours();
@@ -63,6 +63,22 @@ describe("WikiText tests", function() {
63
63
  expect(wiki.renderText("text/html","text/vnd-tiddlywiki","@@color:red;\n<div>\n\nContent</div>\n@@")).toBe("<div style=\"color:red;\"><p>Content</p></div>");
64
64
  expect(wiki.renderText("text/html","text/vnd-tiddlywiki","@@color:red;\n---\n@@")).toBe("<hr style=\"color:red;\">");
65
65
  });
66
+ it("handles inline style wikitext notation", function() {
67
+ expect(wiki.renderText("text/html","text/vnd-tiddlywiki",
68
+ "some @@highlighted@@ text")).toBe('<p>some <span class="tc-inline-style">highlighted</span> text</p>');
69
+ expect(wiki.renderText("text/html","text/vnd-tiddlywiki",
70
+ "some @@color:green;.tc-inline-style 1 style and 1 class@@ text")).toBe('<p>some <span class=" tc-inline-style " style="color:green;">1 style and 1 class</span> text</p>');
71
+ expect(wiki.renderText("text/html","text/vnd-tiddlywiki",
72
+ "some @@background-color:red;red@@ text")).toBe('<p>some <span style="background-color:red;">red</span> text</p>');
73
+ expect(wiki.renderText("text/html","text/vnd-tiddlywiki",
74
+ "some @@.myClass class@@ text")).toBe('<p>some <span class=" myClass ">class</span> text</p>');
75
+ expect(wiki.renderText("text/html","text/vnd-tiddlywiki",
76
+ "some @@.myClass.secondClass 2 classes@@ text")).toBe('<p>some <span class=" myClass secondClass ">2 classes</span> text</p>');
77
+ expect(wiki.renderText("text/html","text/vnd-tiddlywiki",
78
+ "some @@background:red;.myClass style and class@@ text")).toBe('<p>some <span class=" myClass " style="background:red;">style and class</span> text</p>');
79
+ expect(wiki.renderText("text/html","text/vnd-tiddlywiki",
80
+ "some @@background:red;color:white;.myClass 2 style and 1 class@@ text")).toBe('<p>some <span class=" myClass " style="background:red;color:white;">2 style and 1 class</span> text</p>');
81
+ });
66
82
  });
67
83
 
68
84
  })();
@@ -9,6 +9,7 @@
9
9
  ],
10
10
  "build": {
11
11
  "index": [
12
- "--rendertiddler","$:/core/save/all","test.html","text/plain"]
12
+ "--rendertiddler","$:/core/save/all","test.html","text/plain",
13
+ "--test"]
13
14
  }
14
15
  }
@@ -13,4 +13,5 @@ core/ui/Buttons/more-page-actions: show
13
13
  core/ui/Buttons/new-journal: hide
14
14
  core/ui/Buttons/permaview: hide
15
15
  core/ui/Buttons/storyview: hide
16
+ core/ui/Buttons/layout: hide
16
17
  core/ui/Buttons/theme: hide
@@ -12,7 +12,6 @@
12
12
  "de-CH",
13
13
  "de-DE",
14
14
  "el-GR",
15
- "en-GB",
16
15
  "en-US",
17
16
  "es-ES",
18
17
  "fa-IR",
@@ -1,5 +1,5 @@
1
1
  created: 20220721200137586
2
- modified: 20220721200137586
2
+ modified: 20220819200137586
3
3
  tags: [[Table of Contents]]
4
4
  title: Code of Conduct
5
5
  type: text/vnd.tiddlywiki
@@ -17,6 +17,7 @@ These principles guide technical and non-technical decisions, and help contribut
17
17
  * We recognise that the motivation for sharing and helping is usually for appreciation, and not financial gain, and so we take care to acknowledge and ''thank the people who enrich the community by sharing what they have created''
18
18
  * While we are united in our interest in TiddlyWiki, we differ in every other conceivable way. We choose to focus on what unites us, and ''avoid unnecessarily mixing contentious topics like religion and politics''
19
19
  * We treat each other with respect, and start with the assumption that ''others are acting in good faith''
20
+ * We avoid discriminatory language
20
21
  * We try to use our strength as a community to help others
21
22
  * We avoid responding when angry or upset because we try to de-escalate conflict
22
23
  * We make sure we critique ideas, not people
@@ -27,4 +28,6 @@ These principles guide technical and non-technical decisions, and help contribut
27
28
 
28
29
  Our discussions are in English. It is not the first language of many people in the community, nor do we all share the same cultural background and reference points. So we take care to use language that is clear and unambigous, and avoid cultural references or jokes that will not be widely understood.
29
30
 
31
+ It is not acceptable to make jokes or other comments that discriminate by race, gender, sexuality, or other protected characteristic.
32
+
30
33
  As an inclusive community, we are committed to making sure that TiddlyWiki is an accessible tool that understands the needs of people with disabilities.
@@ -14,10 +14,10 @@ We do need a small amount of money on an ongoing basis to pay the costs of runni
14
14
 
15
15
  We use Open Collective to allow you to contribute towards these costs. You can contribute a one-off donation, or make an ongoing monthly commitment. Find out more:
16
16
 
17
- https://opencollective.com/tiddlywikidotorg
17
+ https://opencollective.com/tiddlywiki
18
18
 
19
19
  !! Community Projects
20
20
 
21
21
  We also use Open Collective to raise funds to support the development of major new features, plugins or community infrastructure. These projects generally involve a small team of individuals getting together and making a proposal to the rest of the community.
22
22
 
23
- For example, the [[File Upload Plugin Project|https://opencollective.com/tiddlywikidotorg/projects/tiddlywiki-file-upload]] aims to radically simplify working with attached images.
23
+ For example, the [[File Upload Plugin Project|https://opencollective.com/tiddlywiki/projects/tiddlywiki-file-upload]] aims to radically simplify working with attached images.
@@ -0,0 +1,81 @@
1
+ created: 20220817153236691
2
+ modified: 20221010074314452
3
+ tags: [[Tables in WikiText]]
4
+ title: Tables in WikiText CSS Utility Classes
5
+ type: text/vnd.tiddlywiki
6
+
7
+ ~WikiText tables can be styled by applying CSS classes. For basic information on wiktext tables and how to style them, see [[Tables in WikiText]].
8
+
9
+ {{Table Classes, Captions, Headers and Footers}}
10
+
11
+ As seen above, the resulting table is left aligned and grows to fit the content. This is the browser default layout behaviour for tables. To get another behaviour, various CSS classes can be added into the "`k` row".
12
+
13
+ ! Utility Classes
14
+
15
+ {{Utility Classes}}
16
+
17
+ ! Examples
18
+
19
+ The following examples apply the style classes to tables but the "General Utility Classes" can as well be used on DIVs or other [[HTML block elements|HTML Block Elements]]
20
+
21
+ !! Centred Table
22
+
23
+ To center a table horizontally, use `tc-center`:
24
+
25
+ <<wikitext-example-without-html src:"""|tc-center|k
26
+ |This is a caption |c
27
+ |Cell1 |Cell2 |
28
+ |Cell3 |Cell4 |
29
+ |Header|Header|h
30
+ |Footer|Footer|f
31
+ """>>
32
+
33
+ !! Centred Table, 80% Width
34
+
35
+ To add empty left and right margins to a table that is otherwise full-tiddler-width, you can use `tc-max-width-80`
36
+
37
+ <<wikitext-example-without-html src:"""|tc-center tc-max-width-80|k
38
+ |This is a caption |c
39
+ |Cell1 |<<.lorem>> |
40
+ |<<.lorem>> |Cell4 |
41
+ |Header|Header|h
42
+ """>>
43
+
44
+ !! Table with Maximum Width
45
+
46
+ To expand a table to full tiddler width, use `tc-max-width`
47
+
48
+ <<wikitext-example-without-html src:"""|tc-max-width|k
49
+ |Header|Header|h
50
+ |Cell1 |Cell2 |
51
+ |Cell3 |Cell4 |
52
+ """>>
53
+
54
+ !! Table with First Column Minimum Width
55
+
56
+ The following example shows a simple "form" where the first columns width is adjusted to its content by means of `tc-first-col-min-width`
57
+
58
+ <<wikitext-example-without-html src:"""|tc-max-width tc-first-col-min-width|k
59
+ |Header|Header|h
60
+ |Cell1 |<$edit-text tiddler="$:/temp/test-table-input" tag="input" field="test"/> |
61
+ |Cell3 |<$edit-text tiddler="$:/temp/test-table-input" field="text"/> |
62
+ """>>
63
+
64
+ !! Table with Maximum Width ~TextWidgets
65
+
66
+ Here, the previous "form" is styled further to give the [[TextWidget]]s full width by adding the class `tc-edit-max-width`
67
+
68
+ <<wikitext-example-without-html src:"""|tc-max-width tc-first-col-min-width tc-edit-max-width|k
69
+ |Header|Header|h
70
+ |Cell1 |<$edit-text tiddler="$:/temp/test-table-input" tag="input" field="test"/> |
71
+ |Cell3 |<$edit-text tiddler="$:/temp/test-table-input" field="text"/> |
72
+ """>>
73
+
74
+ !! Table with No Borders
75
+
76
+ The following is a table with maximum width. It contains [[TextWidget]]s with maximum width. The first column is set to be minimum width. Further, all links in the first column are set to __not__ line break (wrap) regardless of window resize.
77
+
78
+ <<wikitext-example-without-html src:"""|tc-max-width tc-first-col-min-width tc-edit-max-width tc-table-no-border tc-first-link-nowrap|k
79
+ | Cell1|<$edit-text tiddler="$:/temp/test-table-input" tag="input" field="test"/> |
80
+ |^ [[Link to a tiddler]]<br>some more text|<$edit-text tiddler="$:/temp/test-table-input" field="text"/> |
81
+ """>>
@@ -0,0 +1,3 @@
1
+ title: $:/_tw_shared/favicons/marketplace
2
+ type: image/png
3
+ tags: TiddlyWikiSitesMenu
@@ -0,0 +1,6 @@
1
+ title: $:/_tw_shared/sites/marketplace
2
+ tags: $:/tags/TiddlyWikiSites TiddlyWikiSitesMenu
3
+ caption: marketplace
4
+ description: Commercial Products and Services
5
+ url: https://talk.tiddlywiki.org/c/marketplace/22
6
+ icon: $:/_tw_shared/favicons/marketplace
@@ -1,3 +1,3 @@
1
1
  title: $:/tags/TiddlyWikiSites
2
- list: $:/_tw_shared/sites/tiddlywiki.com $:/_tw_shared/sites/tiddlywiki.org $:/_tw_shared/sites/talk.tiddlywiki.org $:/_tw_shared/sites/links.tiddlywiki.org $:/_tw_shared/sites/tiddlywiki.com.upgrade $:/_tw_shared/sites/tiddlywiki.com.dev $:/_tw_shared/sites/tiddlywiki.com.prerelease $:/_tw_shared/sites/classic.tiddlywiki.com
2
+ list: $:/_tw_shared/sites/tiddlywiki.com $:/_tw_shared/sites/tiddlywiki.org $:/_tw_shared/sites/talk.tiddlywiki.org $:/_tw_shared/sites/links.tiddlywiki.org $:/_tw_shared/sites/tiddlywiki.com.upgrade $:/_tw_shared/sites/tiddlywiki.com.dev $:/_tw_shared/sites/tiddlywiki.com.prerelease $:/_tw_shared/sites/classic.tiddlywiki.com $:/_tw_shared/sites/marketplace
3
3
  tags: TiddlyWikiSitesMenu
@@ -0,0 +1,19 @@
1
+ title: Funding TiddlyWiki
2
+ tags: About HelloThere
3
+ modified: 20221204165636777
4
+ created: 20221204165636777
5
+
6
+ TiddlyWiki is more useful to everybody if it is free to use, with no financial barriers to long term adoption. It is not altruism; we believe that removing or reducing barriers to adoption will help to ensure TiddlyWiki's future by making the community larger and stronger.
7
+
8
+ Nonetheless, TiddlyWiki is a relatively big, complex machine that requires a significant amount of ongoing work to maintain and improve. Some community infrastructure also requires monthly fees to operate (notably the [[TiddlyWiki forum|Forums]]).
9
+
10
+ The people in the community that do the work have widely varying needs:
11
+
12
+ * At one end, a good proportion of the work on TiddlyWiki is performed by community members on a purely voluntary basis. For those people, the satisfaction of helping others is sufficient reward. Indeed, for many people, unpaid voluntary activities are a satisfying antidote to everyday paid work
13
+ * At the other extreme, JeremyRuston and some other contributors are trying to make a full-time living working on TiddlyWiki by offering commercial products and services around it
14
+ * In between, there are other people who would appreciate an ocassional token to reward them for their work
15
+
16
+ To support these needs in the community, we have two initiatives:
17
+
18
+ * We use [[Open Collective]] to collect donations for the infrastructure costs of the Community and to crowdfund specific developments by individuals or organisations
19
+ * The [[TiddlyWiki Marketplace]] provides a shop window for individuals and organisations offering commercial products and services