tiddlywiki 5.2.0 → 5.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) hide show
  1. package/boot/boot.js +40 -3
  2. package/contributing.md +1 -1
  3. package/core/language/en-GB/ControlPanel.multids +15 -0
  4. package/core/modules/editor/engines/framed.js +1 -1
  5. package/core/modules/editor/engines/simple.js +1 -1
  6. package/core/modules/editor/factory.js +1 -1
  7. package/core/modules/editor/operations/text/focus-editor.js +17 -0
  8. package/core/modules/filterrunprefixes/cascade.js +53 -0
  9. package/core/modules/filterrunprefixes/filter.js +16 -9
  10. package/core/modules/filterrunprefixes/map.js +16 -9
  11. package/core/modules/filterrunprefixes/reduce.js +16 -18
  12. package/core/modules/filterrunprefixes/sort.js +10 -8
  13. package/core/modules/filters/listops.js +12 -0
  14. package/core/modules/filters/math.js +29 -0
  15. package/core/modules/filters/strings.js +11 -9
  16. package/core/modules/parsers/wikiparser/rules/html.js +4 -2
  17. package/core/modules/parsers/wikiparser/wikiparser.js +11 -8
  18. package/core/modules/server/routes/put-tiddler.js +1 -1
  19. package/core/modules/utils/dom/dragndrop.js +8 -2
  20. package/core/modules/utils/utils.js +0 -18
  21. package/core/modules/widgets/action-sendmessage.js +17 -7
  22. package/core/modules/widgets/action-setmultiplefields.js +86 -0
  23. package/core/modules/widgets/codeblock.js +7 -1
  24. package/core/modules/widgets/dropzone.js +2 -1
  25. package/core/modules/widgets/let.js +96 -0
  26. package/core/modules/widgets/link.js +2 -1
  27. package/core/modules/widgets/setmultiplevariables.js +81 -0
  28. package/core/modules/widgets/vars.js +2 -4
  29. package/core/modules/widgets/widget.js +20 -16
  30. package/core/modules/wiki.js +9 -4
  31. package/core/ui/Components/tag-link.tid +1 -1
  32. package/core/ui/ControlPanel/Cascades/EditTemplateBody.tid +9 -0
  33. package/core/ui/ControlPanel/Cascades/StoryTiddler.tid +9 -0
  34. package/core/ui/ControlPanel/Cascades/TiddlerColour.tid +9 -0
  35. package/core/ui/ControlPanel/Cascades/TiddlerIcon.tid +9 -0
  36. package/core/ui/ControlPanel/Cascades/ViewTemplateBody.tid +9 -0
  37. package/core/ui/ControlPanel/Cascades/ViewTemplateTitle.tid +9 -0
  38. package/core/ui/ControlPanel/Cascades.tid +9 -0
  39. package/core/ui/EditTemplate/body/canonical-uri.tid +13 -0
  40. package/core/ui/EditTemplate/body/default.tid +38 -0
  41. package/core/ui/EditTemplate/body.tid +1 -51
  42. package/core/ui/EditTemplate/tags.tid +1 -1
  43. package/core/ui/EditorToolbar/link-dropdown.tid +1 -1
  44. package/core/ui/EditorToolbar/preview.tid +4 -4
  45. package/core/ui/ListTaggedCascade.tid +14 -0
  46. package/core/ui/PageTemplate/story.tid +1 -1
  47. package/core/ui/PluginListItemTemplate.tid +13 -3
  48. package/core/ui/StoryTiddlerTemplate.tid +3 -0
  49. package/core/ui/TagPickerTagTemplate.tid +3 -3
  50. package/core/ui/TagTemplate.tid +1 -1
  51. package/core/ui/TiddlerIcon.tid +8 -0
  52. package/core/ui/ViewTemplate/body/blank.tid +3 -0
  53. package/core/ui/ViewTemplate/body/code.tid +3 -0
  54. package/core/ui/ViewTemplate/body/default.tid +7 -0
  55. package/core/ui/ViewTemplate/{import.tid → body/import.tid} +1 -2
  56. package/core/ui/ViewTemplate/body/plugin.tid +10 -0
  57. package/core/ui/ViewTemplate/body.tid +1 -9
  58. package/core/ui/ViewTemplate/title/default.tid +6 -0
  59. package/core/ui/ViewTemplate/title/system.tid +6 -0
  60. package/core/ui/ViewTemplate/title.tid +4 -17
  61. package/core/wiki/config/EditTemplateBodyFilters.multids +5 -0
  62. package/core/wiki/config/OfficialPluginLibrary.tid +1 -1
  63. package/core/wiki/config/StoryTiddlerTemplateFilters.multids +5 -0
  64. package/core/wiki/config/TiddlerColourFilters.multids +5 -0
  65. package/core/wiki/config/TiddlerIconFilters.multids +5 -0
  66. package/core/wiki/config/ViewTemplateBodyFilters.multids +8 -0
  67. package/core/wiki/config/ViewTemplateTitleFilters.multids +5 -0
  68. package/core/wiki/debugstylesheets.tid +9 -0
  69. package/core/wiki/macros/tag.tid +3 -1
  70. package/core/wiki/peek-stylesheets.tid +3 -0
  71. package/core/wiki/tags/EditTemplateBodyFilter.tid +2 -0
  72. package/core/wiki/tags/StoryTiddlerTemplateFilter.tid +2 -0
  73. package/core/wiki/tags/TiddlerColourFilter.tid +3 -0
  74. package/core/wiki/tags/TiddlerIconFilter.tid +3 -0
  75. package/core/wiki/tags/ViewTemplateBodyFilter.tid +3 -0
  76. package/core/wiki/tags/ViewTemplateTitleFilter.tid +3 -0
  77. package/editions/fr-FR/tiddlers/HelloThumbnail - Latest Version.tid +1 -1
  78. package/editions/prerelease/tiddlers/{Release 5.2.1.tid → Release 5.2.2.tid } +10 -18
  79. package/editions/test/tiddlers/tests/test-filters.js +4 -0
  80. package/editions/test/tiddlers/tests/test-html-parser.js +17 -11
  81. package/editions/test/tiddlers/tests/test-prefixes-filter.js +50 -0
  82. package/editions/test/tiddlers/tests/test-widget.js +34 -0
  83. package/editions/test/tiddlers/tests/test-wikitext-parser.js +30 -30
  84. package/editions/tw5.com/tiddlers/$__StoryList.tid +3 -3
  85. package/editions/tw5.com/tiddlers/{License.tid → about/License.tid} +0 -0
  86. package/editions/tw5.com/tiddlers/commands/NamedCommandParameters.tid +2 -2
  87. package/editions/tw5.com/tiddlers/community/Contributing.tid +2 -2
  88. package/editions/tw5.com/tiddlers/community/TW Icons by morosanuae.tid +2 -2
  89. package/editions/tw5.com/tiddlers/community/TiddlyWiki Hangouts.tid +2 -2
  90. package/editions/tw5.com/tiddlers/community/editions/_Noteself_ by Danielo Rodriguez.tid +2 -2
  91. package/editions/tw5.com/tiddlers/community/examples/Reveal.js by Devin Weaver.tid +2 -2
  92. package/editions/tw5.com/tiddlers/community/plugins/Encrypt single tiddler plugin.tid +2 -2
  93. package/editions/tw5.com/tiddlers/community/plugins/TiddlyMap by Felix Kuppers.tid +2 -2
  94. package/editions/tw5.com/tiddlers/community/resources/TW5 Magick.tid +2 -2
  95. package/editions/tw5.com/tiddlers/community/resources/_Dynamic Tables_ by Jed Carty.tid +2 -2
  96. package/editions/tw5.com/tiddlers/community/resources/_TiddlyServer_ by Matt Lauber.tid +5 -3
  97. package/editions/tw5.com/tiddlers/community/resources/_muritest_ by Simon Huber.tid +2 -2
  98. package/editions/tw5.com/tiddlers/concepts/Cascades.tid +47 -0
  99. package/editions/tw5.com/tiddlers/concepts/Concepts.tid +5 -3
  100. package/editions/tw5.com/tiddlers/concepts/Edit Template Body Cascade.tid +16 -0
  101. package/editions/tw5.com/tiddlers/concepts/Messages.tid +2 -2
  102. package/editions/tw5.com/tiddlers/concepts/ModuleType.tid +2 -2
  103. package/editions/tw5.com/tiddlers/concepts/Order of Tagged Tiddlers.tid +1 -1
  104. package/editions/tw5.com/tiddlers/concepts/Railroad Diagrams.tid +2 -1
  105. package/editions/tw5.com/tiddlers/concepts/Story Tiddler Template Cascade.tid +16 -0
  106. package/editions/tw5.com/tiddlers/concepts/Story Tiddler Template.tid +13 -0
  107. package/editions/tw5.com/tiddlers/concepts/TagTiddlers.tid +1 -1
  108. package/editions/tw5.com/tiddlers/concepts/Tiddler Colour Cascade.tid +16 -0
  109. package/editions/tw5.com/tiddlers/concepts/Tiddler Icon Cascade.tid +16 -0
  110. package/editions/tw5.com/tiddlers/concepts/View Template Body Cascade.tid +19 -0
  111. package/editions/tw5.com/tiddlers/concepts/View Template Title Cascade.tid +16 -0
  112. package/editions/tw5.com/tiddlers/customising/Alternative page layouts.tid +1 -1
  113. package/editions/tw5.com/tiddlers/customising/Creating new toolbar buttons.tid +35 -0
  114. package/editions/tw5.com/tiddlers/customising/Customise TiddlyWiki.tid +3 -3
  115. package/editions/tw5.com/tiddlers/customising/Customising TiddlyWiki's user interface.tid +75 -0
  116. package/editions/tw5.com/tiddlers/definitions/BT.tid +3 -2
  117. package/editions/tw5.com/tiddlers/definitions/MathML.tid +2 -2
  118. package/editions/tw5.com/tiddlers/definitions/Osmosoft.tid +3 -2
  119. package/editions/tw5.com/tiddlers/definitions/node-webkit.tid +2 -1
  120. package/editions/tw5.com/tiddlers/demonstrations/Alice in Wonderland.tid +4 -3707
  121. package/editions/tw5.com/tiddlers/demonstrations/Apple.tid +2 -2
  122. package/editions/tw5.com/tiddlers/demonstrations/Caruso - Ave Maria.tid +1 -0
  123. package/editions/tw5.com/tiddlers/demonstrations/CustomStoryTiddlerTemplateDemo.tid/Demo Tiddler List with Custom Story Tiddler Template.tid +10 -0
  124. package/editions/tw5.com/tiddlers/demonstrations/CustomStoryTiddlerTemplateDemo.tid/Styles.tid +31 -0
  125. package/editions/tw5.com/tiddlers/demonstrations/CustomStoryTiddlerTemplateDemo.tid/Template.tid +25 -0
  126. package/editions/tw5.com/tiddlers/demonstrations/CustomStoryTiddlerTemplateDemo.tid/TiddlerTemplateFilter.tid +5 -0
  127. package/editions/tw5.com/tiddlers/demonstrations/CustomTiddlerColourCascadeDemo/CustomTiddlerColourCascadeDemo.tid +9 -0
  128. package/editions/tw5.com/tiddlers/demonstrations/CustomTiddlerIconCascadeDemo/CustomTiddlerIconCascadeDemo.tid +9 -0
  129. package/editions/tw5.com/tiddlers/demonstrations/ImageGallery Example.tid +5 -16
  130. package/editions/tw5.com/tiddlers/demonstrations/KeyboardDrivenInput/Demonstration_ keyboard-driven-input Macro.tid +2 -2
  131. package/editions/tw5.com/tiddlers/demonstrations/KeyboardDrivenInput/kdi-demo-configtid.tid +4 -3
  132. package/editions/tw5.com/tiddlers/demonstrations/SampleNotification.tid +2 -1
  133. package/editions/tw5.com/tiddlers/demonstrations/SampleTiddlerFirst.tid +3 -1
  134. package/editions/tw5.com/tiddlers/demonstrations/SampleTiddlerSecond.tid +3 -1
  135. package/editions/tw5.com/tiddlers/demonstrations/SampleTiddlerThird.tid +3 -1
  136. package/editions/tw5.com/tiddlers/demonstrations/SampleWizard.tid +2 -1
  137. package/editions/tw5.com/tiddlers/demonstrations/SampleWizard2.tid +2 -1
  138. package/editions/tw5.com/tiddlers/demonstrations/TableOfContents/Contents.tid +3 -2
  139. package/editions/tw5.com/tiddlers/demonstrations/TableOfContents/First.tid +3 -3
  140. package/editions/tw5.com/tiddlers/demonstrations/TableOfContents/FirstOne.tid +2 -2
  141. package/editions/tw5.com/tiddlers/demonstrations/TableOfContents/FirstThree.tid +2 -2
  142. package/editions/tw5.com/tiddlers/demonstrations/TableOfContents/FirstTwo.tid +2 -2
  143. package/editions/tw5.com/tiddlers/demonstrations/TableOfContents/Fourth.tid +2 -2
  144. package/editions/tw5.com/tiddlers/demonstrations/TableOfContents/Second.tid +2 -2
  145. package/editions/tw5.com/tiddlers/demonstrations/TableOfContents/SecondOne.tid +2 -2
  146. package/editions/tw5.com/tiddlers/demonstrations/TableOfContents/SecondThree.tid +3 -3
  147. package/editions/tw5.com/tiddlers/demonstrations/TableOfContents/SecondThreeOne.tid +2 -2
  148. package/editions/tw5.com/tiddlers/demonstrations/TableOfContents/SecondThreeThree.tid +2 -2
  149. package/editions/tw5.com/tiddlers/demonstrations/TableOfContents/SecondThreeTwo.tid +2 -2
  150. package/editions/tw5.com/tiddlers/demonstrations/TableOfContents/SecondTwo.tid +2 -2
  151. package/editions/tw5.com/tiddlers/demonstrations/TableOfContents/Third.tid +3 -3
  152. package/editions/tw5.com/tiddlers/demonstrations/TableOfContents/ThirdOne.tid +2 -2
  153. package/editions/tw5.com/tiddlers/demonstrations/TableOfContents/ThirdThree.tid +2 -2
  154. package/editions/tw5.com/tiddlers/demonstrations/TableOfContents/ThirdTwo.tid +2 -2
  155. package/editions/tw5.com/tiddlers/demonstrations/Tagged with TagMacro.tid +2 -1
  156. package/editions/tw5.com/tiddlers/demonstrations/Tasks/Compose ballad.tid +3 -3
  157. package/editions/tw5.com/tiddlers/demonstrations/Tasks/Get the Ring.tid +3 -3
  158. package/editions/tw5.com/tiddlers/demonstrations/Tasks/Go to Mordor.tid +3 -3
  159. package/editions/tw5.com/tiddlers/demonstrations/Tasks/Kill the Dragon.tid +4 -4
  160. package/editions/tw5.com/tiddlers/demonstrations/Tasks/Make the beds.tid +3 -3
  161. package/editions/tw5.com/tiddlers/demonstrations/Tasks/done.tid +3 -1
  162. package/editions/tw5.com/tiddlers/demonstrations/Tasks/task.tid +3 -2
  163. package/editions/tw5.com/tiddlers/demonstrations/Weekdays/Days of the Week.tid +5 -4
  164. package/editions/tw5.com/tiddlers/demonstrations/Weekdays/Friday.tid +2 -1
  165. package/editions/tw5.com/tiddlers/demonstrations/Weekdays/Monday.tid +2 -1
  166. package/editions/tw5.com/tiddlers/demonstrations/Weekdays/Saturday.tid +3 -2
  167. package/editions/tw5.com/tiddlers/demonstrations/Weekdays/Sunday.tid +2 -1
  168. package/editions/tw5.com/tiddlers/demonstrations/Weekdays/Thursday.tid +2 -1
  169. package/editions/tw5.com/tiddlers/demonstrations/Weekdays/Tuesday.tid +2 -1
  170. package/editions/tw5.com/tiddlers/demonstrations/Weekdays/Wednesday.tid +2 -1
  171. package/editions/tw5.com/tiddlers/demonstrations/sampletag1.tid +3 -0
  172. package/editions/tw5.com/tiddlers/demonstrations/sampletag2.tid +3 -0
  173. package/editions/tw5.com/tiddlers/features/DateFormat.tid +7 -1
  174. package/editions/tw5.com/tiddlers/features/LazyLoading.tid +2 -3
  175. package/editions/tw5.com/tiddlers/features/Scalability.tid +4 -2
  176. package/editions/tw5.com/tiddlers/filters/acos Operator.tid +15 -0
  177. package/editions/tw5.com/tiddlers/filters/asin Operator.tid +15 -0
  178. package/editions/tw5.com/tiddlers/filters/atan Operator.tid +13 -0
  179. package/editions/tw5.com/tiddlers/filters/atan2 Operator.tid +15 -0
  180. package/editions/tw5.com/tiddlers/filters/cos Operator.tid +13 -0
  181. package/editions/tw5.com/tiddlers/filters/deserializers Operator.tid +1 -1
  182. package/editions/tw5.com/tiddlers/filters/enlist-input Operator.tid +1 -1
  183. package/editions/tw5.com/tiddlers/filters/examples/acos Operator (Examples).tid +7 -0
  184. package/editions/tw5.com/tiddlers/filters/examples/asin Operator (Examples).tid +7 -0
  185. package/editions/tw5.com/tiddlers/filters/examples/atan Operator (Examples).tid +7 -0
  186. package/editions/tw5.com/tiddlers/filters/examples/atan2 Operator (Examples).tid +7 -0
  187. package/editions/tw5.com/tiddlers/filters/examples/cos Operator (Examples).tid +7 -0
  188. package/editions/tw5.com/tiddlers/filters/examples/cycle Operator (Examples).tid +1 -1
  189. package/editions/tw5.com/tiddlers/filters/examples/log Operator (Examples).tid +1 -1
  190. package/editions/tw5.com/tiddlers/filters/examples/lookup Operator (Examples).tid +2 -1
  191. package/editions/tw5.com/tiddlers/filters/examples/match Operator (Examples).tid +1 -1
  192. package/editions/tw5.com/tiddlers/filters/examples/search-replace Operator (Examples).tid +8 -2
  193. package/editions/tw5.com/tiddlers/filters/examples/sin Operator (Examples).tid +7 -0
  194. package/editions/tw5.com/tiddlers/filters/examples/subfilter Operator (Examples).tid +25 -3
  195. package/editions/tw5.com/tiddlers/filters/examples/tan Operator (Examples).tid +7 -0
  196. package/editions/tw5.com/tiddlers/filters/examples/zth Operator (Examples).tid +10 -0
  197. package/editions/tw5.com/tiddlers/filters/list.tid +2 -2
  198. package/editions/tw5.com/tiddlers/filters/nth.tid +9 -7
  199. package/editions/tw5.com/tiddlers/filters/range.tid +1 -1
  200. package/editions/tw5.com/tiddlers/filters/sin Operator.tid +13 -0
  201. package/editions/tw5.com/tiddlers/filters/storyviews.tid +1 -1
  202. package/editions/tw5.com/tiddlers/filters/subfilter Operator.tid +4 -2
  203. package/editions/tw5.com/tiddlers/filters/syntax/Cascade Filter Run Prefix (Examples).tid +46 -0
  204. package/editions/tw5.com/tiddlers/filters/syntax/Cascade Filter Run Prefix.tid +20 -0
  205. package/editions/tw5.com/tiddlers/filters/syntax/Filter Expression.tid +4 -2
  206. package/editions/tw5.com/tiddlers/filters/syntax/Filter Filter Run Prefix (Examples).tid +30 -0
  207. package/editions/tw5.com/tiddlers/filters/syntax/Filter Filter Run Prefix.tid +27 -0
  208. package/editions/tw5.com/tiddlers/filters/syntax/Filter Run Prefix (Examples).tid +7 -36
  209. package/editions/tw5.com/tiddlers/filters/syntax/Intersection Filter Run Prefix (Examples).tid +36 -0
  210. package/editions/tw5.com/tiddlers/filters/syntax/Intersection Filter Run Prefix.tid +15 -0
  211. package/editions/tw5.com/tiddlers/filters/syntax/Map Filter Run Prefix (Examples).tid +26 -1
  212. package/editions/tw5.com/tiddlers/filters/syntax/Map Filter Run Prefix.tid +9 -1
  213. package/editions/tw5.com/tiddlers/filters/syntax/Named Filter Run Prefix.tid +2 -2
  214. package/editions/tw5.com/tiddlers/filters/syntax/Reduce Filter Run Prefix (Examples).tid +27 -0
  215. package/editions/tw5.com/tiddlers/filters/syntax/Reduce Filter Run Prefix.tid +38 -0
  216. package/editions/tw5.com/tiddlers/filters/tan Operator.tid +13 -0
  217. package/editions/tw5.com/tiddlers/filters/zth Operator.tid +18 -0
  218. package/editions/tw5.com/tiddlers/gettingstarted/GettingStarted - Android.tid +2 -1
  219. package/editions/tw5.com/tiddlers/gettingstarted/GettingStarted - Chrome.tid +2 -1
  220. package/editions/tw5.com/tiddlers/gettingstarted/GettingStarted - Firefox.tid +2 -1
  221. package/editions/tw5.com/tiddlers/gettingstarted/GettingStarted - Internet Explorer.tid +2 -1
  222. package/editions/tw5.com/tiddlers/gettingstarted/GettingStarted - Node.js.tid +2 -1
  223. package/editions/tw5.com/tiddlers/gettingstarted/GettingStarted - Online.tid +2 -2
  224. package/editions/tw5.com/tiddlers/gettingstarted/GettingStarted - Safari.tid +2 -1
  225. package/editions/tw5.com/tiddlers/gettingstarted/GettingStarted - iOS.tid +2 -1
  226. package/editions/tw5.com/tiddlers/{AllTiddlers.tid → hellothere/AllTiddlers.tid} +0 -0
  227. package/editions/tw5.com/tiddlers/hellothere/HelloThere.tid +1 -1
  228. package/editions/tw5.com/tiddlers/hellothere/Some of the things you can do with TiddlyWiki.tid +2 -2
  229. package/editions/tw5.com/tiddlers/hellothere/badges/ProductHunt-Badge.svg.tid +1 -0
  230. package/editions/tw5.com/tiddlers/hellothere/badges/ProductHunt-Link.tid +1 -0
  231. package/editions/tw5.com/tiddlers/hiddensettings/Hidden Setting NewImageType.tid +3 -1
  232. package/editions/tw5.com/tiddlers/hiddensettings/Hidden Setting ShowEditPreviewPerTiddler.tid +10 -0
  233. package/editions/tw5.com/tiddlers/hiddensettings/Hidden Setting_ Typin Refresh Delay.tid +2 -2
  234. package/editions/tw5.com/tiddlers/howtos/Creating SubStories.tid +21 -33
  235. package/editions/tw5.com/tiddlers/howtos/Debugging Stylesheets.tid +11 -0
  236. package/editions/tw5.com/tiddlers/howtos/How to create a custom story tiddler template.tid +40 -0
  237. package/editions/tw5.com/tiddlers/howtos/How to create a custom tiddler colour rule.tid +36 -0
  238. package/editions/tw5.com/tiddlers/howtos/How to create a custom tiddler icon rule.tid +36 -0
  239. package/editions/tw5.com/tiddlers/howtos/How to create dynamic editor toolbar buttons.tid +2 -2
  240. package/editions/tw5.com/tiddlers/howtos/Simple ways to write protect tiddlers.tid +4 -5
  241. package/editions/tw5.com/tiddlers/howtos/Text preview.tid +6 -2
  242. package/editions/tw5.com/tiddlers/howtos/Using Stylesheets.tid +8 -4
  243. package/editions/tw5.com/tiddlers/images/Icon Gallery.tid +14 -0
  244. package/editions/tw5.com/tiddlers/images/New Release Banner.png +0 -0
  245. package/editions/tw5.com/tiddlers/languages/LanguageGallery.tid +2 -2
  246. package/editions/tw5.com/tiddlers/macros/examples/colour-picker Macro (Example 1).tid +2 -2
  247. package/editions/tw5.com/tiddlers/macros/examples/image-picker Macro (Example 1).tid +2 -2
  248. package/editions/tw5.com/tiddlers/macros/examples/image-picker Macro (Example 2).tid +2 -2
  249. package/editions/tw5.com/tiddlers/macros/examples/unusedtitle Macro (Examples 1).tid +2 -2
  250. package/editions/tw5.com/tiddlers/mechanisms/RefreshThrottling.tid +2 -2
  251. package/editions/tw5.com/tiddlers/mechanisms/StateMechanism.tid +2 -2
  252. package/editions/tw5.com/tiddlers/messages/SampleModal.tid +2 -1
  253. package/editions/tw5.com/tiddlers/messages/SampleWindowTemplate.tid +10 -0
  254. package/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-edit-text-operation.tid +3 -0
  255. package/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-open-window.tid +22 -4
  256. package/editions/tw5.com/tiddlers/nodejs/Environment Variables on Node.js.tid +4 -2
  257. package/editions/tw5.com/tiddlers/nodejs/Installing TiddlyWiki on Node.js.tid +10 -3
  258. package/editions/tw5.com/tiddlers/nodejs/tiddlywiki.files_Files.tid +6 -5
  259. package/editions/tw5.com/tiddlers/nodejs/tiddlywiki.info_Files.tid +2 -2
  260. package/editions/tw5.com/tiddlers/platforms/TiddlyFox Apocalypse.tid +2 -2
  261. package/editions/tw5.com/tiddlers/platforms/TiddlyWiki in the Sky for TiddlyWeb.tid +3 -8
  262. package/editions/tw5.com/tiddlers/plugins/Plugin Types.tid +2 -2
  263. package/editions/tw5.com/tiddlers/reference/Reference.tid +1 -0
  264. package/editions/tw5.com/tiddlers/releasenotes/BetaReleases.tid +2 -2
  265. package/editions/tw5.com/tiddlers/releasenotes/Release 5.2.1.tid +118 -0
  266. package/editions/tw5.com/tiddlers/releasenotes/ReleaseTemplate.tid +3 -0
  267. package/editions/tw5.com/tiddlers/releasenotes/alpha/AlphaReleases.tid +2 -2
  268. package/editions/tw5.com/tiddlers/saving/Example config-tiddlyweb-host for IIS.txt.meta +1 -1
  269. package/editions/tw5.com/tiddlers/saving/Example package.json for IIS.txt.meta +1 -1
  270. package/editions/tw5.com/tiddlers/saving/Example tiddlywiki.info for IIS.txt.meta +1 -1
  271. package/editions/tw5.com/tiddlers/saving/Example web.config for IIS.txt.meta +1 -1
  272. package/editions/tw5.com/tiddlers/saving/Saving via WebDAV.tid +31 -1
  273. package/editions/tw5.com/tiddlers/styleguide/Documentation Macros.tid +6 -2
  274. package/editions/tw5.com/tiddlers/{TableOfContents.tid → system/TableOfContents.tid} +0 -0
  275. package/editions/tw5.com/tiddlers/system/doc-macros.tid +17 -0
  276. package/editions/tw5.com/tiddlers/system/doc-styles.tid +32 -1
  277. package/editions/tw5.com/tiddlers/system/operator-macros.tid +12 -5
  278. package/editions/tw5.com/tiddlers/system/operator-template.tid +8 -8
  279. package/editions/tw5.com/tiddlers/systemtags/SystemTag_ $__tags_Image.tid +2 -2
  280. package/editions/tw5.com/tiddlers/variables/examples/Sample Headings 1-2-3.tid +2 -1
  281. package/editions/tw5.com/tiddlers/variables/examples/Sample Headings 3-4-5.tid +2 -1
  282. package/editions/tw5.com/tiddlers/variables/examples/Sample Headings 4-5-6.tid +2 -1
  283. package/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget Example 1.tid +2 -2
  284. package/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget Example 2.tid +2 -2
  285. package/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget Example 3.tid +2 -2
  286. package/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget Example 4.tid +2 -2
  287. package/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget Template.tid +2 -2
  288. package/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget_Example.tid +2 -2
  289. package/editions/tw5.com/tiddlers/widgets/ActionListopsWidget.tid +52 -2
  290. package/editions/tw5.com/tiddlers/widgets/ActionSendMessageWidget.tid +3 -1
  291. package/editions/tw5.com/tiddlers/widgets/ActionSetMultipleFieldsWidget.tid +31 -0
  292. package/editions/tw5.com/tiddlers/widgets/ActionWidget Execution Modes.tid +5 -2
  293. package/editions/tw5.com/tiddlers/widgets/ActionWidgets.tid +4 -4
  294. package/editions/tw5.com/tiddlers/widgets/ButtonWidget.tid +2 -2
  295. package/editions/tw5.com/tiddlers/widgets/CheckboxWidget.tid +2 -2
  296. package/editions/tw5.com/tiddlers/widgets/DraggableWidget.tid +2 -2
  297. package/editions/tw5.com/tiddlers/widgets/DroppableWidget.tid +2 -2
  298. package/editions/tw5.com/tiddlers/widgets/DropzoneWidget.tid +2 -2
  299. package/editions/tw5.com/tiddlers/widgets/EditTextWidget.tid +8 -19
  300. package/editions/tw5.com/tiddlers/widgets/EditWidget.tid +2 -2
  301. package/editions/tw5.com/tiddlers/widgets/EventCatcherWidget.tid +2 -2
  302. package/editions/tw5.com/tiddlers/widgets/FieldManglerWidget.tid +3 -3
  303. package/editions/tw5.com/tiddlers/{Keyboard Codes.tid → widgets/Keyboard Codes.tid} +0 -0
  304. package/editions/tw5.com/tiddlers/widgets/KeyboardWidget.tid +2 -2
  305. package/editions/tw5.com/tiddlers/widgets/LetWidget.tid +57 -0
  306. package/editions/tw5.com/tiddlers/widgets/LinkCatcherWidget.tid +2 -2
  307. package/editions/tw5.com/tiddlers/widgets/ListopsData.tid +1 -0
  308. package/editions/tw5.com/tiddlers/widgets/MessageCatcherWidget.tid +2 -2
  309. package/editions/tw5.com/tiddlers/widgets/MessageHandlerWidgets.tid +13 -0
  310. package/editions/tw5.com/tiddlers/widgets/NavigatorWidget.tid +5 -2
  311. package/editions/tw5.com/tiddlers/widgets/RadioWidget.tid +2 -2
  312. package/editions/tw5.com/tiddlers/widgets/RangeWidget.tid +2 -2
  313. package/editions/tw5.com/tiddlers/widgets/SelectWidget.tid +15 -2
  314. package/editions/tw5.com/tiddlers/widgets/SetMultipleVariablesWidget.tid +33 -0
  315. package/editions/tw5.com/tiddlers/widgets/The Extended Listops Filters.tid +2 -1
  316. package/editions/tw5.com/tiddlers/widgets/TriggeringWidgets.tid +13 -0
  317. package/editions/tw5.com/tiddlers/widgets/VarsWidget.tid +7 -5
  318. package/editions/tw5.com/tiddlers/wikitext/Transclusion and Substitution.tid +3 -2
  319. package/languages/pl-PL/ControlPanel.multids +1 -1
  320. package/languages/pl-PL/Docs/PaletteColours.multids +1 -1
  321. package/languages/pl-PL/Import.multids +1 -1
  322. package/languages/pl-PL/Misc.multids +2 -2
  323. package/languages/pl-PL/SideBar.multids +1 -1
  324. package/languages/zh-Hans/ControlPanel.multids +15 -0
  325. package/languages/zh-Hant/ControlPanel.multids +15 -0
  326. package/licenses/cla-individual.md +10 -0
  327. package/package.json +1 -1
  328. package/plugins/tiddlywiki/codemirror/engine.js +55 -2
  329. package/readme.md +2 -2
  330. package/themes/tiddlywiki/vanilla/ThemeTweaks.tid +7 -3
  331. package/themes/tiddlywiki/vanilla/base.tid +6 -0
  332. package/themes/tiddlywiki/vanilla/reset.tid +1 -1
  333. package/core/ui/ViewTemplate/plugin.tid +0 -15
  334. package/editions/tw5.com/tiddlers/customising/Page and tiddler layout customisation.tid +0 -63
  335. package/editions/tw5.com/tiddlers/demonstrations/SampleAlert.tid +0 -9
package/boot/boot.js CHANGED
@@ -256,6 +256,28 @@ $tw.utils.deepDefaults = function(object /*, sourceObjectList */) {
256
256
  return object;
257
257
  };
258
258
 
259
+ /*
260
+ Convert a URIComponent encoded string to a string safely
261
+ */
262
+ $tw.utils.decodeURIComponentSafe = function(s) {
263
+ var v = s;
264
+ try {
265
+ v = decodeURIComponent(s);
266
+ } catch(e) {}
267
+ return v;
268
+ };
269
+
270
+ /*
271
+ Convert a URI encoded string to a string safely
272
+ */
273
+ $tw.utils.decodeURISafe = function(s) {
274
+ var v = s;
275
+ try {
276
+ v = decodeURI(s);
277
+ } catch(e) {}
278
+ return v;
279
+ };
280
+
259
281
  /*
260
282
  Convert "&amp;" to &, "&nbsp;" to nbsp, "&lt;" to <, "&gt;" to > and "&quot;" to "
261
283
  */
@@ -1928,6 +1950,20 @@ $tw.loadTiddlersFromSpecification = function(filepath,excludeRegExp) {
1928
1950
  tiddlers.push({tiddlers: fileTiddlers});
1929
1951
  }
1930
1952
  };
1953
+ // Helper to recursively search subdirectories
1954
+ var getAllFiles = function(dirPath, recurse, arrayOfFiles) {
1955
+ recurse = recurse || false;
1956
+ arrayOfFiles = arrayOfFiles || [];
1957
+ var files = fs.readdirSync(dirPath);
1958
+ files.forEach(function(file) {
1959
+ if (recurse && fs.statSync(dirPath + path.sep + file).isDirectory()) {
1960
+ arrayOfFiles = getAllFiles(dirPath + path.sep + file, recurse, arrayOfFiles);
1961
+ } else if(fs.statSync(dirPath + path.sep + file).isFile()){
1962
+ arrayOfFiles.push(path.join(dirPath, path.sep, file));
1963
+ }
1964
+ });
1965
+ return arrayOfFiles;
1966
+ }
1931
1967
  // Process the listed tiddlers
1932
1968
  $tw.utils.each(filesInfo.tiddlers,function(tidInfo) {
1933
1969
  if(tidInfo.prefix && tidInfo.suffix) {
@@ -1951,13 +1987,14 @@ $tw.loadTiddlersFromSpecification = function(filepath,excludeRegExp) {
1951
1987
  // Process directory specifier
1952
1988
  var dirPath = path.resolve(filepath,dirSpec.path);
1953
1989
  if(fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory()) {
1954
- var files = fs.readdirSync(dirPath),
1990
+ var files = getAllFiles(dirPath, dirSpec.searchSubdirectories),
1955
1991
  fileRegExp = new RegExp(dirSpec.filesRegExp || "^.*$"),
1956
1992
  metaRegExp = /^.*\.meta$/;
1957
1993
  for(var t=0; t<files.length; t++) {
1958
- var filename = files[t];
1994
+ var thisPath = path.relative(filepath, files[t]),
1995
+ filename = path.basename(thisPath);
1959
1996
  if(filename !== "tiddlywiki.files" && !metaRegExp.test(filename) && fileRegExp.test(filename)) {
1960
- processFile(dirPath + path.sep + filename,dirSpec.isTiddlerFile,dirSpec.fields,dirSpec.isEditableFile);
1997
+ processFile(thisPath,dirSpec.isTiddlerFile,dirSpec.fields,dirSpec.isEditableFile);
1961
1998
  }
1962
1999
  }
1963
2000
  } else {
package/contributing.md CHANGED
@@ -1,3 +1,3 @@
1
- <h1 class="">Contributing to <a class="tc-tiddlylink tc-tiddlylink-resolves" href="https://tiddlywiki.com/static/TiddlyWiki5.html">TiddlyWiki5</a></h1><p>Here we focus on contributions via <a class="tc-tiddlylink tc-tiddlylink-resolves" href="https://tiddlywiki.com/static/GitHub.html">GitHub</a> Pull Requests but there are many other ways that anyone can help the <a class="tc-tiddlylink tc-tiddlylink-resolves" href="https://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> project, such as <a class="tc-tiddlylink tc-tiddlylink-resolves" href="https://tiddlywiki.com/static/ReportingBugs.html">reporting bugs</a> or helping to <a class="tc-tiddlylink tc-tiddlylink-resolves" href="https://tiddlywiki.com/static/Improving%2520TiddlyWiki%2520Documentation.html">improve our documentation</a>.</p><h1 class="">Rules for Pull Requests</h1><p>PRs must meet these minimum requirements before they can be considered for merging:</p><ul><li>The material in the PR must be free of licensing restrictions. Which means that either:<ul><li>The author must hold the copyright in all of the material themselves</li><li>The material must be licensed under a license compatible with <a class="tc-tiddlylink tc-tiddlylink-resolves" href="https://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a>'s BSD license</li></ul></li><li>The author must sign the Contributors License Agreement (see below)</li><li>Each PR should only make a single feature change</li><li>The title of the PR should be 50 characters or less</li><li>The title of the PR should be capitalised, and should not end with a period</li><li>The title of the PR should be written in the imperative mood. See below</li><li>Adequate explanation in the body of the PR for the motivation and implementation of the change. Focus on the <em>why</em> and <em>what</em>, rather than the <em>how</em></li><li>PRs must be self-contained. Although they can link to material elsewhere, everything needed to understand the intention of the PR should be included</li><li>Documentation as appropriate for end-users or developers</li><li>Observe the coding style</li><li>Read the developers documentation</li><li>Please open a consultation issue prior to investing time in making a large PR</li></ul><h2 class="">Imperative Mood for PR Titles</h2><p>The "imperative mood" means written as if giving a command or instruction. See <a class="tc-tiddlylink-external" href="https://chris.beams.io/posts/git-commit/#imperative" rel="noopener noreferrer" target="_blank">this post</a> for more details, but the gist is that the title of the PR should make sense when used to complete the sentence "If applied, this commit will...". So for example, these are good PR titles:</p><ul><li>If applied, this commit will <em>update the contributing guidelines</em></li><li>If applied, this commit will <em>change css-escape-polyfill to a $tw.utils method</em></li><li>If applied, this commit will <em>make it easier to subclass the wikitext parser with a custom rule set</em></li></ul><p>These a poorly worded PR titles:</p><ul><li><strike>If applied, this commit will <em>edit text widgets should use default text for missing fields</em></strike></li><li><strike>If applied, this commit will <em>signing the CLA</em></strike></li><li><strike>If applied, this commit will <em>don't crash if options.event is missing</em></strike></li></ul><p>PR titles may also include a short prefix to indicate the subsystem to which they apply. For example:</p><ul><li><em>Menu plugin: Include menu text in aerial rotator</em></li></ul><h1 class="">Commenting on Pull Requests</h1><p>One of the principles of open source is that many pairs of eyes on the code can improve quality. So, we welcome comments and critiques of pending PRs. <a class="tc-tiddlylink-external" href="https://conventionalcomments.org" rel="noopener noreferrer" target="_blank">Conventional Comments</a> has some techcniques to help make comments as constructive and actionable as possible. Notably, they recommend prefixing a comment with a label to clarify the intention:</p><table><tbody><tr class="evenRow"><td align="left">praise</td><td align="left">Praises highlight something positive. Try to leave at least one of these comments per review. Do not leave false praise (which can actually be damaging). Do look for something to sincerely praise</td></tr><tr class="oddRow"><td align="left">nitpick</td><td align="left">Nitpicks are small, trivial, but necessary changes. Distinguishing nitpick comments significantly helps direct the reader's attention to comments requiring more involvement</td></tr><tr class="evenRow"><td align="left">suggestion</td><td align="left">Suggestions are specific requests to improve the subject under review. It is assumed that we all want to do what's best, so these comments are never dismissed as “mere suggestions”, but are taken seriously</td></tr><tr class="oddRow"><td align="left">issue</td><td align="left">Issues represent user-facing problems. If possible, it's great to follow this kind of comment with a suggestion</td></tr><tr class="evenRow"><td align="left">question</td><td align="left">Questions are appropriate if you have a potential concern but are not quite sure if it's relevant or not. Asking the author for clarification or investigation can lead to a quick resolution</td></tr><tr class="oddRow"><td align="left">thought</td><td align="left">Thoughts represent an idea that popped up from reviewing. These comments are non-blocking by nature, but they are extremely valuable and can lead to more focused initiatives and mentoring opportunities</td></tr><tr class="evenRow"><td align="left">chore</td><td align="left">Chores are simple tasks that must be done before the subject can be “officially” accepted. Usually, these comments reference some common process. Try to leave a link to the process description so that the reader knows how to resolve the chore</td></tr></tbody></table><h1 class="">Contributor License Agreement</h1><p>Like other <a class="tc-tiddlylink tc-tiddlylink-resolves" href="https://tiddlywiki.com/static/OpenSource.html">OpenSource</a> projects, <a class="tc-tiddlylink tc-tiddlylink-resolves" href="https://tiddlywiki.com/static/TiddlyWiki5.html">TiddlyWiki5</a> needs a signed contributor license agreement from individual contributors. This is a legal agreement that allows contributors to assert that they own the copyright of their contribution, and that they agree to license it to the <a class="tc-tiddlylink tc-tiddlylink-missing" href="https://tiddlywiki.com/static/UnaMesa.html">UnaMesa</a> Association (the legal entity that owns <a class="tc-tiddlylink tc-tiddlylink-resolves" href="https://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> on behalf of the community).</p><ul><li>For individuals use: <a class="tc-tiddlylink-external" href="https://github.com/Jermolene/TiddlyWiki5/tree/master/licenses/cla-individual.md" rel="noopener noreferrer" target="_blank">licenses/CLA-individual</a></li><li>For entities use: <a class="tc-tiddlylink-external" href="https://github.com/Jermolene/TiddlyWiki5/tree/master/licenses/cla-entity.md" rel="noopener noreferrer" target="_blank">licenses/CLA-entity</a></li></ul><h1 class="">How to sign the CLA</h1><p>Create a <a class="tc-tiddlylink tc-tiddlylink-resolves" href="https://tiddlywiki.com/static/GitHub.html">GitHub</a> pull request to add your name to <code>cla-individual.md</code> or <code>cla-entity.md</code>, with the date in the format (YYYY/MM/DD).</p><p><strong>step by step</strong></p><ol><li>Navigate to <a class="tc-tiddlylink-external" href="https://github.com/Jermolene/TiddlyWiki5/tree/master/licenses/cla-individual.md" rel="noopener noreferrer" target="_blank">licenses/CLA-individual</a> or <a class="tc-tiddlylink-external" href="https://github.com/Jermolene/TiddlyWiki5/tree/master/licenses/cla-entity.md" rel="noopener noreferrer" target="_blank">licenses/CLA-entity</a> according to whether you are signing as an individual or representative of an organisation</li><li>Ensure that the "branch" dropdown at the top left is set to <code>tiddlywiki-com</code></li><li>Click the "edit" button at the top-right corner (clicking this button will fork the project so you can edit the file)</li><li>Add your name at the bottom<ul><li>eg: <code>Jeremy Ruston, @Jermolene, 2011/11/22</code></li></ul></li><li>Below the edit box for the CLA text you should see a box labelled <strong>Propose file change</strong></li><li>Enter a brief title to explain the change (eg, "Signing the CLA")</li><li>Click the green button labelled <strong>Propose file change</strong></li><li>On the following screen, click the green button labelled <strong>Create pull request</strong></li></ol><hr><p><em>The CLA documents used for this project were created using <a class="tc-tiddlylink-external" href="http://www.harmonyagreements.org" rel="noopener noreferrer" target="_blank">Harmony Project Templates</a>. "HA-CLA-I-LIST Version 1.0" for "CLA-individual" and "HA-CLA-E-LIST Version 1.0" for "CLA-entity".</em>
1
+ <h1 class="">Contributing to <a class="tc-tiddlylink tc-tiddlylink-resolves" href="https://tiddlywiki.com/static/TiddlyWiki5.html">TiddlyWiki5</a></h1><p>Here we focus on contributions via <a class="tc-tiddlylink tc-tiddlylink-resolves" href="https://tiddlywiki.com/static/GitHub.html">GitHub</a> Pull Requests but there are many other ways that anyone can help the <a class="tc-tiddlylink tc-tiddlylink-resolves" href="https://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> project, such as <a class="tc-tiddlylink tc-tiddlylink-resolves" href="https://tiddlywiki.com/static/ReportingBugs.html">reporting bugs</a> or helping to <a class="tc-tiddlylink tc-tiddlylink-resolves" href="https://tiddlywiki.com/static/Improving%2520TiddlyWiki%2520Documentation.html">improve our documentation</a>.</p><h1 class="">Rules for Pull Requests</h1><p>PRs must meet these minimum requirements before they can be considered for merging:</p><ul><li>The material in the PR must be free of licensing restrictions. Which means that either:<ul><li>The author must hold the copyright in all of the material themselves</li><li>The material must be licensed under a license compatible with <a class="tc-tiddlylink tc-tiddlylink-resolves" href="https://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a>'s BSD license</li></ul></li><li>The author must sign the Contributors License Agreement (see below)</li><li>Each PR should only make a single feature change</li><li>The title of the PR should be 50 characters or less</li><li>The title of the PR should be capitalised, and should not end with a period</li><li>The title of the PR should be written in the imperative mood. See below</li><li>Adequate explanation in the body of the PR for the motivation and implementation of the change. Focus on the <em>why</em> and <em>what</em>, rather than the <em>how</em></li><li>PRs must be self-contained. Although they can link to material elsewhere, everything needed to understand the intention of the PR should be included</li><li>Documentation as appropriate for end-users or developers</li><li>Observe the coding style</li><li>Read the developers documentation</li><li>Please open a consultation issue prior to investing time in making a large PR</li></ul><h2 class="">Imperative Mood for PR Titles</h2><p>The "imperative mood" means written as if giving a command or instruction. See <a class="tc-tiddlylink-external" href="https://chris.beams.io/posts/git-commit/#imperative" rel="noopener noreferrer" target="_blank">this post</a> for more details, but the gist is that the title of the PR should make sense when used to complete the sentence "If applied, this commit will...". So for example, these are good PR titles:</p><ul><li>If applied, this commit will <em>update the contributing guidelines</em></li><li>If applied, this commit will <em>change css-escape-polyfill to a $tw.utils method</em></li><li>If applied, this commit will <em>make it easier to subclass the wikitext parser with a custom rule set</em></li></ul><p>These a poorly worded PR titles:</p><ul><li><strike>If applied, this commit will <em>edit text widgets should use default text for missing fields</em></strike></li><li><strike>If applied, this commit will <em>signing the CLA</em></strike></li><li><strike>If applied, this commit will <em>don't crash if options.event is missing</em></strike></li></ul><p>PR titles may also include a short prefix to indicate the subsystem to which they apply. For example:</p><ul><li><em>Menu plugin: Include menu text in aerial rotator</em></li></ul><h1 class="">Commenting on Pull Requests</h1><p>One of the principles of open source is that many pairs of eyes on the code can improve quality. So, we welcome comments and critiques of pending PRs. <a class="tc-tiddlylink-external" href="https://conventionalcomments.org" rel="noopener noreferrer" target="_blank">Conventional Comments</a> has some techniques to help make comments as constructive and actionable as possible. Notably, they recommend prefixing a comment with a label to clarify the intention:</p><table><tbody><tr class="evenRow"><td align="left">praise</td><td align="left">Praises highlight something positive. Try to leave at least one of these comments per review. Do not leave false praise (which can actually be damaging). Do look for something to sincerely praise</td></tr><tr class="oddRow"><td align="left">nitpick</td><td align="left">Nitpicks are small, trivial, but necessary changes. Distinguishing nitpick comments significantly helps direct the reader's attention to comments requiring more involvement</td></tr><tr class="evenRow"><td align="left">suggestion</td><td align="left">Suggestions are specific requests to improve the subject under review. It is assumed that we all want to do what's best, so these comments are never dismissed as “mere suggestions”, but are taken seriously</td></tr><tr class="oddRow"><td align="left">issue</td><td align="left">Issues represent user-facing problems. If possible, it's great to follow this kind of comment with a suggestion</td></tr><tr class="evenRow"><td align="left">question</td><td align="left">Questions are appropriate if you have a potential concern but are not quite sure if it's relevant or not. Asking the author for clarification or investigation can lead to a quick resolution</td></tr><tr class="oddRow"><td align="left">thought</td><td align="left">Thoughts represent an idea that popped up from reviewing. These comments are non-blocking by nature, but they are extremely valuable and can lead to more focused initiatives and mentoring opportunities</td></tr><tr class="evenRow"><td align="left">chore</td><td align="left">Chores are simple tasks that must be done before the subject can be “officially” accepted. Usually, these comments reference some common process. Try to leave a link to the process description so that the reader knows how to resolve the chore</td></tr></tbody></table><h1 class="">Contributor License Agreement</h1><p>Like other <a class="tc-tiddlylink tc-tiddlylink-resolves" href="https://tiddlywiki.com/static/OpenSource.html">OpenSource</a> projects, <a class="tc-tiddlylink tc-tiddlylink-resolves" href="https://tiddlywiki.com/static/TiddlyWiki5.html">TiddlyWiki5</a> needs a signed contributor license agreement from individual contributors. This is a legal agreement that allows contributors to assert that they own the copyright of their contribution, and that they agree to license it to the <a class="tc-tiddlylink tc-tiddlylink-missing" href="https://tiddlywiki.com/static/UnaMesa.html">UnaMesa</a> Association (the legal entity that owns <a class="tc-tiddlylink tc-tiddlylink-resolves" href="https://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> on behalf of the community).</p><ul><li>For individuals use: <a class="tc-tiddlylink-external" href="https://github.com/Jermolene/TiddlyWiki5/tree/master/licenses/cla-individual.md" rel="noopener noreferrer" target="_blank">licenses/CLA-individual</a></li><li>For entities use: <a class="tc-tiddlylink-external" href="https://github.com/Jermolene/TiddlyWiki5/tree/master/licenses/cla-entity.md" rel="noopener noreferrer" target="_blank">licenses/CLA-entity</a></li></ul><h1 class="">How to sign the CLA</h1><p>Create a <a class="tc-tiddlylink tc-tiddlylink-resolves" href="https://tiddlywiki.com/static/GitHub.html">GitHub</a> pull request to add your name to <code>cla-individual.md</code> or <code>cla-entity.md</code>, with the date in the format (YYYY/MM/DD).</p><p><strong>step by step</strong></p><ol><li>Navigate to <a class="tc-tiddlylink-external" href="https://github.com/Jermolene/TiddlyWiki5/tree/master/licenses/cla-individual.md" rel="noopener noreferrer" target="_blank">licenses/CLA-individual</a> or <a class="tc-tiddlylink-external" href="https://github.com/Jermolene/TiddlyWiki5/tree/master/licenses/cla-entity.md" rel="noopener noreferrer" target="_blank">licenses/CLA-entity</a> according to whether you are signing as an individual or representative of an organisation</li><li>Ensure that the "branch" dropdown at the top left is set to <code>tiddlywiki-com</code></li><li>Click the "edit" button at the top-right corner (clicking this button will fork the project so you can edit the file)</li><li>Add your name at the bottom<ul><li>eg: <code>Jeremy Ruston, @Jermolene, 2011/11/22</code></li></ul></li><li>Below the edit box for the CLA text you should see a box labelled <strong>Propose file change</strong></li><li>Enter a brief title to explain the change (eg, "Signing the CLA")</li><li>Click the green button labelled <strong>Propose file change</strong></li><li>On the following screen, click the green button labelled <strong>Create pull request</strong></li></ol><hr><p><em>The CLA documents used for this project were created using <a class="tc-tiddlylink-external" href="http://www.harmonyagreements.org" rel="noopener noreferrer" target="_blank">Harmony Project Templates</a>. "HA-CLA-I-LIST Version 1.0" for "CLA-individual" and "HA-CLA-E-LIST Version 1.0" for "CLA-entity".</em>
2
2
  </p><p><em>This file was automatically generated by <a class="tc-tiddlylink tc-tiddlylink-resolves" href="https://tiddlywiki.com/static/TiddlyWiki5.html">TiddlyWiki5</a></em>
3
3
  </p>
@@ -27,10 +27,15 @@ Basics/Tiddlers/Prompt: Number of tiddlers
27
27
  Basics/Title/Prompt: Title of this ~TiddlyWiki
28
28
  Basics/Username/Prompt: Username for signing edits
29
29
  Basics/Version/Prompt: ~TiddlyWiki version
30
+ Cascades/Caption: Cascades
31
+ Cascades/Hint: These global rules are used to dynamically choose certain templates. The result of the cascade is the result of the first filter in the sequence that returns a result
32
+ Cascades/TagPrompt: Filters tagged <$macrocall $name="tag" tag=<<currentTiddler>>/>
30
33
  EditorTypes/Caption: Editor Types
31
34
  EditorTypes/Editor/Caption: Editor
32
35
  EditorTypes/Hint: These tiddlers determine which editor is used to edit specific tiddler types.
33
36
  EditorTypes/Type/Caption: Type
37
+ EditTemplateBody/Caption: Edit Template Body
38
+ EditTemplateBody/Hint: This rule cascade is used by the default edit template to dynamically choose the template for editing the body of a tiddler.
34
39
  Info/Caption: Info
35
40
  Info/Hint: Information about this TiddlyWiki
36
41
  KeyboardShortcuts/Add/Prompt: Type shortcut here
@@ -191,6 +196,8 @@ Settings/TitleLinks/Yes/Description: Display tiddler titles as links
191
196
  Settings/MissingLinks/Caption: Wiki Links
192
197
  Settings/MissingLinks/Hint: Choose whether to link to tiddlers that do not exist yet
193
198
  Settings/MissingLinks/Description: Enable links to missing tiddlers
199
+ StoryTiddler/Caption: Story Tiddler
200
+ StoryTiddler/Hint: This rule cascade is used to dynamically choose the template for displaying a tiddler in the story river.
194
201
  StoryView/Caption: Story View
195
202
  StoryView/Prompt: Current view:
196
203
  Stylesheets/Caption: Stylesheets
@@ -201,6 +208,10 @@ Theme/Caption: Theme
201
208
  Theme/Prompt: Current theme:
202
209
  TiddlerFields/Caption: Tiddler Fields
203
210
  TiddlerFields/Hint: This is the full set of TiddlerFields in use in this wiki (including system tiddlers but excluding shadow tiddlers).
211
+ TiddlerColour/Caption: Tiddler Colour
212
+ TiddlerColour/Hint: This rules cascade is used to dynamically choose the colour for a tiddler (used for the icon and the associated tag pill).
213
+ TiddlerIcon/Caption: Tiddler Icon
214
+ TiddlerIcon/Hint: This rules cascade is used to dynamically choose the icon for a tiddler.
204
215
  Toolbars/Caption: Toolbars
205
216
  Toolbars/EditToolbar/Caption: Edit Toolbar
206
217
  Toolbars/EditToolbar/Hint: Choose which buttons are displayed for tiddlers in edit mode. Drag and drop to change the ordering
@@ -212,3 +223,7 @@ Toolbars/EditorToolbar/Hint: Choose which buttons are displayed in the editor to
212
223
  Toolbars/ViewToolbar/Caption: View Toolbar
213
224
  Toolbars/ViewToolbar/Hint: Choose which buttons are displayed for tiddlers in view mode. Drag and drop to change the ordering
214
225
  Tools/Download/Full/Caption: Download full wiki
226
+ ViewTemplateBody/Caption: View Template Body
227
+ ViewTemplateBody/Hint: This rule cascade is used by the default view template to dynamically choose the template for displaying the body of a tiddler.
228
+ ViewTemplateTitle/Caption: View Template Title
229
+ ViewTemplateTitle/Hint: This rule cascade is used by the default view template to dynamically choose the template for displaying the title of a tiddler.
@@ -205,7 +205,7 @@ FramedEngine.prototype.handleInputEvent = function(event) {
205
205
  this.widget.saveChanges(this.getText());
206
206
  this.fixHeight();
207
207
  if(this.widget.editInputActions) {
208
- this.widget.invokeActionString(this.widget.editInputActions);
208
+ this.widget.invokeActionString(this.widget.editInputActions,this,event,{actionValue: this.getText()});
209
209
  }
210
210
  return true;
211
211
  };
@@ -133,7 +133,7 @@ SimpleEngine.prototype.handleInputEvent = function(event) {
133
133
  this.widget.saveChanges(this.getText());
134
134
  this.fixHeight();
135
135
  if(this.widget.editInputActions) {
136
- this.widget.invokeActionString(this.widget.editInputActions);
136
+ this.widget.invokeActionString(this.widget.editInputActions,this,event,{actionValue: this.getText()});
137
137
  }
138
138
  return true;
139
139
  };
@@ -324,7 +324,7 @@ function editTextWidgetFactory(toolbarEngine,nonToolbarEngine) {
324
324
  If there are no Files, let the browser handle it.
325
325
  */
326
326
  EditTextWidget.prototype.handleDropEvent = function(event) {
327
- if(event.dataTransfer.files.length) {
327
+ if($tw.utils.dragEventContainsFiles(event)) {
328
328
  event.preventDefault();
329
329
  event.stopPropagation();
330
330
  this.dispatchDOMEvent(this.cloneEvent(event,["dataTransfer"]));
@@ -0,0 +1,17 @@
1
+ /*\
2
+ title: $:/core/modules/editor/operations/text/focus-editor.js
3
+ type: application/javascript
4
+ module-type: texteditoroperation
5
+ Simply focus the Text editor
6
+ \*/
7
+ (function(){
8
+
9
+ /*jslint node: true, browser: true */
10
+ /*global $tw: false */
11
+ "use strict";
12
+
13
+ exports["focus-editor"] = function(event,operation) {
14
+ operation = null;
15
+ };
16
+
17
+ })();
@@ -0,0 +1,53 @@
1
+ /*\
2
+ title: $:/core/modules/filterrunprefixes/cascade.js
3
+ type: application/javascript
4
+ module-type: filterrunprefix
5
+ \*/
6
+ (function(){
7
+
8
+ /*jslint node: true, browser: true */
9
+ /*global $tw: false */
10
+ "use strict";
11
+
12
+ /*
13
+ Export our filter prefix function
14
+ */
15
+ exports.cascade = function(operationSubFunction,options) {
16
+ return function(results,source,widget) {
17
+ if(results.length !== 0) {
18
+ var filterList = operationSubFunction(source,widget),
19
+ filterFnList = [];
20
+ var inputResults = results.toArray();
21
+ results.clear();
22
+ $tw.utils.each(inputResults,function(title) {
23
+ var result = ""; // If no filter matches, we return an empty string
24
+ $tw.utils.each(filterList,function(filter,index) {
25
+ if(!filterFnList[index]) {
26
+ filterFnList[index] = options.wiki.compileFilter(filter);
27
+ }
28
+ var output = filterFnList[index](options.wiki.makeTiddlerIterator([title]),{
29
+ getVariable: function(name,opts) {
30
+ opts = opts || {};
31
+ opts.variables = {
32
+ "currentTiddler": "" + title,
33
+ "..currentTiddler": widget.getVariable("currentTiddler")
34
+ };
35
+ if(name in opts.variables) {
36
+ return opts.variables[name];
37
+ } else {
38
+ return widget.getVariable(name,opts);
39
+ }
40
+ }
41
+ });
42
+ if(output.length !== 0) {
43
+ result = output[0];
44
+ return false;
45
+ }
46
+ });
47
+ results.push(result);
48
+ });
49
+ }
50
+ }
51
+ };
52
+
53
+ })();
@@ -16,23 +16,30 @@ Export our filter function
16
16
  exports.filter = function(operationSubFunction,options) {
17
17
  return function(results,source,widget) {
18
18
  if(results.length > 0) {
19
- var resultsToRemove = [];
19
+ var resultsToRemove = [],
20
+ index = 0;
20
21
  results.each(function(title) {
21
22
  var filtered = operationSubFunction(options.wiki.makeTiddlerIterator([title]),{
22
- getVariable: function(name) {
23
- switch(name) {
24
- case "currentTiddler":
25
- return "" + title;
26
- case "..currentTiddler":
27
- return widget.getVariable("currentTiddler");
28
- default:
29
- return widget.getVariable(name);
23
+ getVariable: function(name,opts) {
24
+ opts = opts || {};
25
+ opts.variables = {
26
+ "currentTiddler": "" + title,
27
+ "..currentTiddler": widget.getVariable("currentTiddler"),
28
+ "index": "" + index,
29
+ "revIndex": "" + (results.length - 1 - index),
30
+ "length": "" + results.length
31
+ };
32
+ if(name in opts.variables) {
33
+ return opts.variables[name];
34
+ } else {
35
+ return widget.getVariable(name,opts);
30
36
  }
31
37
  }
32
38
  });
33
39
  if(filtered.length === 0) {
34
40
  resultsToRemove.push(title);
35
41
  }
42
+ ++index;
36
43
  });
37
44
  results.remove(resultsToRemove);
38
45
  }
@@ -15,22 +15,29 @@ Export our filter prefix function
15
15
  exports.map = function(operationSubFunction,options) {
16
16
  return function(results,source,widget) {
17
17
  if(results.length > 0) {
18
- var inputTitles = results.toArray();
18
+ var inputTitles = results.toArray(),
19
+ index = 0;
19
20
  results.clear();
20
21
  $tw.utils.each(inputTitles,function(title) {
21
22
  var filtered = operationSubFunction(options.wiki.makeTiddlerIterator([title]),{
22
- getVariable: function(name) {
23
- switch(name) {
24
- case "currentTiddler":
25
- return "" + title;
26
- case "..currentTiddler":
27
- return widget.getVariable("currentTiddler");
28
- default:
29
- return widget.getVariable(name);
23
+ getVariable: function(name,opts) {
24
+ opts = opts || {};
25
+ opts.variables = {
26
+ "currentTiddler": "" + title,
27
+ "..currentTiddler": widget.getVariable("currentTiddler"),
28
+ "index": "" + index,
29
+ "revIndex": "" + (inputTitles.length - 1 - index),
30
+ "length": "" + inputTitles.length
31
+ };
32
+ if(name in opts.variables) {
33
+ return opts.variables[name];
34
+ } else {
35
+ return widget.getVariable(name,opts);
30
36
  }
31
37
  }
32
38
  });
33
39
  results.push(filtered[0] || "");
40
+ ++index;
34
41
  });
35
42
  }
36
43
  }
@@ -15,26 +15,24 @@ Export our filter prefix function
15
15
  exports.reduce = function(operationSubFunction,options) {
16
16
  return function(results,source,widget) {
17
17
  if(results.length > 0) {
18
- var accumulator = "";
19
- var index = 0;
18
+ var accumulator = "",
19
+ index = 0;
20
20
  results.each(function(title) {
21
21
  var list = operationSubFunction(options.wiki.makeTiddlerIterator([title]),{
22
- getVariable: function(name) {
23
- switch(name) {
24
- case "currentTiddler":
25
- return "" + title;
26
- case "..currentTiddler":
27
- return widget.getVariable("currentTiddler");
28
- case "accumulator":
29
- return "" + accumulator;
30
- case "index":
31
- return "" + index;
32
- case "revIndex":
33
- return "" + (results.length - 1 - index);
34
- case "length":
35
- return "" + results.length;
36
- default:
37
- return widget.getVariable(name);
22
+ getVariable: function(name,opts) {
23
+ opts = opts || {};
24
+ opts.variables = {
25
+ "currentTiddler": "" + title,
26
+ "..currentTiddler": widget.getVariable("currentTiddler"),
27
+ "index": "" + index,
28
+ "revIndex": "" + (results.length - 1 - index),
29
+ "length": "" + results.length,
30
+ "accumulator": "" + accumulator
31
+ };
32
+ if(name in opts.variables) {
33
+ return opts.variables[name];
34
+ } else {
35
+ return widget.getVariable(name,opts);
38
36
  }
39
37
  }
40
38
  });
@@ -26,14 +26,16 @@ exports.sort = function(operationSubFunction,options) {
26
26
  compareFn;
27
27
  results.each(function(title) {
28
28
  var key = operationSubFunction(options.wiki.makeTiddlerIterator([title]),{
29
- getVariable: function(name) {
30
- switch(name) {
31
- case "currentTiddler":
32
- return "" + title;
33
- case "..currentTiddler":
34
- return widget.getVariable("currentTiddler");
35
- default:
36
- return widget.getVariable(name);
29
+ getVariable: function(name,opts) {
30
+ opts = opts || {};
31
+ opts.variables = {
32
+ "currentTiddler": "" + title,
33
+ "..currentTiddler": widget.getVariable("currentTiddler")
34
+ };
35
+ if(name in opts.variables) {
36
+ return opts.variables[name];
37
+ } else {
38
+ return widget.getVariable(name,opts);
37
39
  }
38
40
  }
39
41
  });
@@ -103,4 +103,16 @@ exports.nth = function(source,operator,options) {
103
103
  return results.slice(count - 1,count);
104
104
  };
105
105
 
106
+ /*
107
+ The zero based nth member of the list
108
+ */
109
+ exports.zth = function(source,operator,options) {
110
+ var count = $tw.utils.getInt(operator.operand,0),
111
+ results = [];
112
+ source(function(tiddler,title) {
113
+ results.push(title);
114
+ });
115
+ return results.slice(count,count + 1);
116
+ };
117
+
106
118
  })();
@@ -165,6 +165,35 @@ exports["standard-deviation"] = makeNumericReducingOperator(
165
165
  }
166
166
  );
167
167
 
168
+ //trigonometry
169
+ exports.cos = makeNumericBinaryOperator(
170
+ function(a) {return Math.cos(a)}
171
+ );
172
+
173
+ exports.sin = makeNumericBinaryOperator(
174
+ function(a) {return Math.sin(a)}
175
+ );
176
+
177
+ exports.tan = makeNumericBinaryOperator(
178
+ function(a) {return Math.tan(a)}
179
+ );
180
+
181
+ exports.acos = makeNumericBinaryOperator(
182
+ function(a) {return Math.acos(a)}
183
+ );
184
+
185
+ exports.asin = makeNumericBinaryOperator(
186
+ function(a) {return Math.asin(a)}
187
+ );
188
+
189
+ exports.atan = makeNumericBinaryOperator(
190
+ function(a) {return Math.atan(a)}
191
+ );
192
+
193
+ exports.atan2 = makeNumericBinaryOperator(
194
+ function(a,b) {return Math.atan2(a,b)}
195
+ );
196
+
168
197
  //Calculate the variance of a population of numbers in an array given its mean
169
198
  function getVarianceFromArray(values,mean) {
170
199
  var deviationTotal = values.reduce(function(accumulator,value) {
@@ -121,21 +121,23 @@ exports["search-replace"] = function(source,operator,options) {
121
121
  flagSuffix = (suffixes[0] ? (suffixes[0][0] || "") : ""),
122
122
  flags = (flagSuffix.indexOf("g") !== -1 ? "g" : "") + (flagSuffix.indexOf("i") !== -1 ? "i" : "") + (flagSuffix.indexOf("m") !== -1 ? "m" : ""),
123
123
  isRegExp = (suffixes[1] && suffixes[1][0] === "regexp") ? true : false,
124
- searchTerm,
124
+ //Escape regexp characters if the operand is not a regular expression
125
+ searchTerm = isRegExp ? operator.operand : $tw.utils.escapeRegExp(operator.operand),
126
+ //Escape $ character in replacement string if not in regular expression mode
127
+ replacement = isRegExp ? operator.operands[1] : (operator.operands[1]||"").replace(/\$/g,"$$$$"),
125
128
  regExp;
129
+ try {
130
+ regExp = new RegExp(searchTerm,flags);
131
+ } catch(ex) {
132
+ return ["RegExp error: " + ex];
133
+ }
126
134
 
127
135
  source(function(tiddler,title) {
128
136
  if(title && (operator.operands.length > 1)) {
129
- //Escape regexp characters if the operand is not a regular expression
130
- searchTerm = isRegExp ? operator.operand : $tw.utils.escapeRegExp(operator.operand);
131
- try {
132
- regExp = new RegExp(searchTerm,flags);
133
- } catch(ex) {
134
- return ["RegExp error: " + ex];
135
- }
136
137
  results.push(
137
- title.replace(regExp,operator.operands[1])
138
+ title.replace(regExp,replacement)
138
139
  );
140
+ regExp.lastIndex = 0;
139
141
  } else {
140
142
  results.push(title);
141
143
  }
@@ -66,7 +66,7 @@ exports.parse = function() {
66
66
  };
67
67
 
68
68
  /*
69
- Look for an HTML tag. Returns null if not found, otherwise returns {type: "element", name:, attributes: [], isSelfClosing:, start:, end:,}
69
+ Look for an HTML tag. Returns null if not found, otherwise returns {type: "element", name:, attributes: {}, orderedAttributes: [], isSelfClosing:, start:, end:,}
70
70
  */
71
71
  exports.parseTag = function(source,pos,options) {
72
72
  options = options || {};
@@ -74,7 +74,8 @@ exports.parseTag = function(source,pos,options) {
74
74
  node = {
75
75
  type: "element",
76
76
  start: pos,
77
- attributes: {}
77
+ attributes: {},
78
+ orderedAttributes: []
78
79
  };
79
80
  // Define our regexps
80
81
  var reTagName = /([a-zA-Z0-9\-\$]+)/g;
@@ -106,6 +107,7 @@ exports.parseTag = function(source,pos,options) {
106
107
  // Process attributes
107
108
  var attribute = $tw.utils.parseAttribute(source,pos);
108
109
  while(attribute) {
110
+ node.orderedAttributes.push(attribute);
109
111
  node.attributes[attribute.name] = attribute;
110
112
  pos = attribute.end;
111
113
  // Get the next attribute
@@ -231,7 +231,10 @@ WikiParser.prototype.parseBlock = function(terminatorRegExpString) {
231
231
  return nextMatch.rule.parse();
232
232
  }
233
233
  // Treat it as a paragraph if we didn't find a block rule
234
- return [{type: "element", tag: "p", children: this.parseInlineRun(terminatorRegExp)}];
234
+ var start = this.pos;
235
+ var children = this.parseInlineRun(terminatorRegExp);
236
+ var end = this.pos;
237
+ return [{type: "element", tag: "p", children: children, start: start, end: end }];
235
238
  };
236
239
 
237
240
  /*
@@ -307,7 +310,7 @@ WikiParser.prototype.parseInlineRunUnterminated = function(options) {
307
310
  while(this.pos < this.sourceLength && nextMatch) {
308
311
  // Process the text preceding the run rule
309
312
  if(nextMatch.matchIndex > this.pos) {
310
- this.pushTextWidget(tree,this.source.substring(this.pos,nextMatch.matchIndex));
313
+ this.pushTextWidget(tree,this.source.substring(this.pos,nextMatch.matchIndex),this.pos,nextMatch.matchIndex);
311
314
  this.pos = nextMatch.matchIndex;
312
315
  }
313
316
  // Process the run rule
@@ -317,7 +320,7 @@ WikiParser.prototype.parseInlineRunUnterminated = function(options) {
317
320
  }
318
321
  // Process the remaining text
319
322
  if(this.pos < this.sourceLength) {
320
- this.pushTextWidget(tree,this.source.substr(this.pos));
323
+ this.pushTextWidget(tree,this.source.substr(this.pos),this.pos,this.sourceLength);
321
324
  }
322
325
  this.pos = this.sourceLength;
323
326
  return tree;
@@ -337,7 +340,7 @@ WikiParser.prototype.parseInlineRunTerminated = function(terminatorRegExp,option
337
340
  if(terminatorMatch) {
338
341
  if(!inlineRuleMatch || inlineRuleMatch.matchIndex >= terminatorMatch.index) {
339
342
  if(terminatorMatch.index > this.pos) {
340
- this.pushTextWidget(tree,this.source.substring(this.pos,terminatorMatch.index));
343
+ this.pushTextWidget(tree,this.source.substring(this.pos,terminatorMatch.index),this.pos,terminatorMatch.index);
341
344
  }
342
345
  this.pos = terminatorMatch.index;
343
346
  if(options.eatTerminator) {
@@ -350,7 +353,7 @@ WikiParser.prototype.parseInlineRunTerminated = function(terminatorRegExp,option
350
353
  if(inlineRuleMatch) {
351
354
  // Preceding text
352
355
  if(inlineRuleMatch.matchIndex > this.pos) {
353
- this.pushTextWidget(tree,this.source.substring(this.pos,inlineRuleMatch.matchIndex));
356
+ this.pushTextWidget(tree,this.source.substring(this.pos,inlineRuleMatch.matchIndex),this.pos,inlineRuleMatch.matchIndex);
354
357
  this.pos = inlineRuleMatch.matchIndex;
355
358
  }
356
359
  // Process the inline rule
@@ -364,7 +367,7 @@ WikiParser.prototype.parseInlineRunTerminated = function(terminatorRegExp,option
364
367
  }
365
368
  // Process the remaining text
366
369
  if(this.pos < this.sourceLength) {
367
- this.pushTextWidget(tree,this.source.substr(this.pos));
370
+ this.pushTextWidget(tree,this.source.substr(this.pos),this.pos,this.sourceLength);
368
371
  }
369
372
  this.pos = this.sourceLength;
370
373
  return tree;
@@ -373,12 +376,12 @@ WikiParser.prototype.parseInlineRunTerminated = function(terminatorRegExp,option
373
376
  /*
374
377
  Push a text widget onto an array, respecting the configTrimWhiteSpace setting
375
378
  */
376
- WikiParser.prototype.pushTextWidget = function(array,text) {
379
+ WikiParser.prototype.pushTextWidget = function(array,text,start,end) {
377
380
  if(this.configTrimWhiteSpace) {
378
381
  text = $tw.utils.trim(text);
379
382
  }
380
383
  if(text) {
381
- array.push({type: "text", text: text});
384
+ array.push({type: "text", text: text, start: start, end: end});
382
385
  }
383
386
  };
384
387
 
@@ -30,7 +30,7 @@ exports.handler = function(request,response,state) {
30
30
  if(fields.revision) {
31
31
  delete fields.revision;
32
32
  }
33
- state.wiki.addTiddler(new $tw.Tiddler(state.wiki.getCreationFields(),fields,{title: title},state.wiki.getModificationFields()));
33
+ state.wiki.addTiddler(new $tw.Tiddler(fields,{title: title}));
34
34
  var changeCount = state.wiki.getChangeCount(title).toString();
35
35
  response.writeHead(204, "OK",{
36
36
  Etag: "\"default/" + encodeURIComponent(title) + "/" + changeCount + ":\"",
@@ -208,10 +208,10 @@ function parseJSONTiddlers(json,fallbackTitle) {
208
208
  return data;
209
209
  };
210
210
 
211
- exports.dragEventContainsFiles = function(event) {
211
+ function dragEventContainsType(event,targetType) {
212
212
  if(event.dataTransfer.types) {
213
213
  for(var i=0; i<event.dataTransfer.types.length; i++) {
214
- if(event.dataTransfer.types[i] === "Files") {
214
+ if(event.dataTransfer.types[i] === targetType) {
215
215
  return true;
216
216
  break;
217
217
  }
@@ -220,4 +220,10 @@ exports.dragEventContainsFiles = function(event) {
220
220
  return false;
221
221
  };
222
222
 
223
+ exports.dragEventContainsFiles = function(event) {
224
+ return (dragEventContainsType(event,"Files") && !dragEventContainsType(event,"text/plain"));
225
+ };
226
+
227
+ exports.dragEventContainsType = dragEventContainsType;
228
+
223
229
  })();