tiddlywiki 5.3.0 → 5.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/ci.yml +9 -2
- package/bin/build-site.sh +25 -5
- package/bin/ci-test.sh +16 -0
- package/boot/boot.js +18 -7
- package/core/images/new-journal-button.tid +1 -3
- package/core/language/en-GB/Exporters.multids +1 -1
- package/core/language/en-GB/Help/commands.tid +1 -1
- package/core/language/en-GB/Help/savewikifolder.tid +2 -2
- package/core/language/en-GB/Help/server.tid +1 -1
- package/core/language/en-GB/Types/image_svg_xml.tid +1 -1
- package/core/language/en-GB/Types/image_x-icon.tid +1 -1
- package/core/modules/commands/savetiddlers.js +1 -1
- package/core/modules/editor/engines/framed.js +1 -1
- package/core/modules/editor/engines/simple.js +1 -1
- package/core/modules/filters/all.js +5 -5
- package/core/modules/filters/encodings.js +6 -2
- package/core/modules/filters/json-ops.js +95 -1
- package/core/modules/filters/listops.js +1 -0
- package/core/modules/parsers/textparser.js +5 -4
- package/core/modules/parsers/wikiparser/rules/conditional.js +120 -0
- package/core/modules/parsers/wikiparser/rules/fnprocdef.js +2 -2
- package/core/modules/parsers/wikiparser/rules/parameters.js +1 -1
- package/core/modules/parsers/wikiparser/wikiparser.js +31 -8
- package/core/modules/savers/github.js +1 -1
- package/core/modules/startup/rootwidget.js +1 -0
- package/core/modules/startup/startup.js +5 -0
- package/core/modules/startup/windows.js +2 -1
- package/core/modules/syncer.js +160 -122
- package/core/modules/utils/dom/dom.js +3 -3
- package/core/modules/utils/dom/dragndrop.js +4 -2
- package/core/modules/utils/dom/http.js +19 -3
- package/core/modules/utils/fakedom.js +5 -1
- package/core/modules/utils/utils.js +27 -4
- package/core/modules/widgets/browse.js +10 -0
- package/core/modules/widgets/button.js +15 -3
- package/core/modules/widgets/checkbox.js +14 -1
- package/core/modules/widgets/draggable.js +16 -5
- package/core/modules/widgets/droppable.js +14 -2
- package/core/modules/widgets/image.js +19 -14
- package/core/modules/widgets/importvariables.js +1 -1
- package/core/modules/widgets/link.js +12 -2
- package/core/modules/widgets/list.js +176 -19
- package/core/modules/widgets/radio.js +4 -0
- package/core/modules/widgets/range.js +4 -0
- package/core/modules/widgets/scrollable.js +66 -1
- package/core/modules/widgets/select.js +35 -23
- package/core/modules/widgets/transclude.js +88 -45
- package/core/modules/widgets/widget.js +42 -47
- package/core/modules/wiki.js +3 -3
- package/core/templates/html-json-skinny-tiddler.tid +0 -1
- package/core/templates/html-json-tiddler.tid +1 -1
- package/core/templates/store.area.template.html.tid +4 -4
- package/core/ui/AlertTemplate.tid +1 -0
- package/core/ui/ControlPanel/Basics.tid +2 -2
- package/core/ui/EditTemplate/body/default.tid +12 -8
- package/core/ui/EditTemplate/fields.tid +2 -2
- package/core/ui/EditTemplate/type.tid +1 -1
- package/core/ui/EditTemplate.tid +1 -0
- package/core/ui/EditorToolbar/preview.tid +6 -0
- package/core/ui/ImportPreviews/Text.tid +1 -0
- package/core/ui/PageStylesheet.tid +1 -0
- package/core/ui/PageTemplate.tid +2 -1
- package/core/ui/RootTemplate.tid +1 -0
- package/core/ui/StoryTiddlerTemplate.tid +1 -0
- package/core/ui/ViewTemplate/body/default.tid +1 -0
- package/core/ui/ViewTemplate/subtitle.tid +2 -5
- package/core/ui/ViewTemplate.tid +1 -0
- package/core/wiki/config/OfficialPluginLibrary.tid +1 -1
- package/core/wiki/config/ViewTemplateBodyFilters.multids +2 -1
- package/core/wiki/macros/colour-picker.tid +6 -6
- package/core/wiki/macros/image-picker.tid +5 -5
- package/core/wiki/macros/list.tid +95 -78
- package/core/wiki/macros/tabs.tid +9 -1
- package/core/wiki/macros/tag-picker.tid +2 -2
- package/core/wiki/macros/tag.tid +2 -1
- package/core/wiki/macros/toc.tid +3 -3
- package/core/wiki/tags/ViewTemplateBodyFilter.tid +1 -2
- package/editions/de-AT/tiddlers/HelloThere.tid +2 -2
- package/editions/de-AT/tiddlers/community/Fur_Entwickler.tid +1 -1
- package/editions/de-AT/tiddlers/external/tiddlywiki.files +1 -1
- package/editions/de-AT-server/tiddlers/system/favicon.png +0 -0
- package/editions/{es-ES-server/tiddlers/system/favicon.ico.meta → de-AT-server/tiddlers/system/favicon.png.meta} +1 -1
- package/editions/dev/tiddlers/images/favicon.png +0 -0
- package/editions/{de-AT-server/tiddlers/system/favicon.ico.meta → dev/tiddlers/images/favicon.png.meta} +1 -1
- package/editions/dev/tiddlers/new/HookMechanism.tid +28 -3
- package/editions/empty/tiddlywiki.info +5 -2
- package/editions/es-ES/tiddlers/Forums.tid +4 -5
- package/editions/es-ES/tiddlers/HelloThere.tid +2 -2
- package/editions/es-ES/tiddlers/Typography.tid +1 -1
- package/editions/es-ES/tiddlers/images/favicon.png +0 -0
- package/editions/{dev/tiddlers/images/favicon.ico.meta → es-ES/tiddlers/images/favicon.png.meta} +1 -1
- package/editions/es-ES/tiddlers/images/green_favicon.png +0 -0
- package/editions/es-ES/tiddlers/images/{green_favicon.ico.meta → green_favicon.png.meta} +1 -1
- package/editions/es-ES-server/tiddlers/system/favicon.png +0 -0
- package/editions/{es-ES/tiddlers/images/favicon.ico.meta → es-ES-server/tiddlers/system/favicon.png.meta} +1 -1
- package/editions/fr-FR/tiddlers/images/favicon.png +0 -0
- package/editions/fr-FR/tiddlers/images/favicon.png.meta +2 -0
- package/editions/fr-FR/tiddlers/images/green_favicon.png +0 -0
- package/editions/fr-FR/tiddlers/images/{green_favicon.ico.meta → green_favicon.png.meta} +1 -1
- package/editions/fr-FR-server/tiddlers/system/favicon.png +0 -0
- package/editions/fr-FR-server/tiddlers/system/favicon.png.meta +2 -0
- package/editions/highlightdemo/tiddlywiki.info +1 -1
- package/editions/ja-JP/tiddlers/images/favicon.png +0 -0
- package/editions/ja-JP/tiddlers/images/favicon.png.meta +2 -0
- package/editions/ja-JP/tiddlers/images/green_favicon.png +0 -0
- package/editions/ja-JP/tiddlers/images/{green_favicon.ico.meta → green_favicon.png.meta} +1 -1
- package/editions/katexdemo/tiddlywiki.info +1 -1
- package/editions/ko-KR/tiddlers/images/favicon.png +0 -0
- package/editions/ko-KR/tiddlers/images/favicon.png.meta +2 -0
- package/editions/ko-KR/tiddlers/images/green_favicon.png +0 -0
- package/editions/ko-KR/tiddlers/images/{green_favicon.ico.meta → green_favicon.png.meta} +1 -1
- package/editions/ko-KR-server/tiddlers/system/favicon.png +0 -0
- package/editions/ko-KR-server/tiddlers/system/favicon.png.meta +2 -0
- package/editions/pluginlibrary/tiddlywiki.info +2 -2
- package/editions/prerelease/tiddlers/{Release 5.3.1.tid → Release 5.3.3.tid } +23 -21
- package/editions/prerelease/tiddlers/system/PrereleaseLocalPluginLibrary.tid +1 -1
- package/editions/prerelease/tiddlers/system/PrereleaseOfficialPluginLibrary.tid +1 -1
- package/editions/prerelease/tiddlers/system/TiddlyWiki Pre-release.tid +1 -1
- package/editions/prerelease/tiddlers/system/favicon.png +0 -0
- package/editions/prerelease/tiddlers/system/favicon.png.meta +2 -0
- package/editions/prerelease/tiddlers/system/temp-my-scroll-position.tid +3 -0
- package/editions/resumebuilder/tiddlywiki.info +1 -1
- package/editions/server/tiddlywiki.info +1 -1
- package/editions/server-external-js/tiddlywiki.info +1 -1
- package/editions/test/playwright.spec.js +25 -0
- package/editions/test/tiddlers/tests/data/conditionals/Basic.tid +26 -0
- package/editions/test/tiddlers/tests/data/conditionals/BlockMode.tid +37 -0
- package/editions/test/tiddlers/tests/data/conditionals/Else.tid +26 -0
- package/editions/test/tiddlers/tests/data/conditionals/Elseif.tid +32 -0
- package/editions/test/tiddlers/tests/data/conditionals/MissingEndIf.tid +26 -0
- package/editions/test/tiddlers/tests/data/conditionals/MultipleResults.tid +12 -0
- package/editions/test/tiddlers/tests/data/conditionals/Nested.tid +38 -0
- package/editions/test/tiddlers/tests/data/conditionals/NestedElseif.tid +60 -0
- package/editions/test/tiddlers/tests/data/functions/IndentedFunctions.tid +24 -0
- package/editions/test/tiddlers/tests/data/functions/WikifiedFunctions.tid +1 -1
- package/editions/test/tiddlers/tests/data/importvariables/WithSetWidgets.tid +23 -0
- package/editions/test/tiddlers/tests/data/importvariables/WithSetWidgets2.tid +22 -0
- package/editions/test/tiddlers/tests/data/importvariables/WithSetWidgetsAndMacros.tid +29 -0
- package/editions/test/tiddlers/tests/data/list-widget/WithExplicitTemplates.tid +29 -0
- package/editions/test/tiddlers/tests/data/list-widget/WithExplicitTemplatesInBlockMode.tid +32 -0
- package/editions/test/tiddlers/tests/data/list-widget/WithExplicitTemplatesOverriddenByAttributes.tid +33 -0
- package/editions/test/tiddlers/tests/data/list-widget/WithJoinTemplate.tid +30 -0
- package/editions/test/tiddlers/tests/data/list-widget/WithJoinTemplateInBlockMode.tid +32 -0
- package/editions/test/tiddlers/tests/data/list-widget/WithLimit.tid +25 -0
- package/editions/test/tiddlers/tests/data/list-widget/WithMissingTemplate.tid +26 -0
- package/editions/test/tiddlers/tests/data/procedures/Nested-indented.tid +20 -0
- package/editions/test/tiddlers/tests/data/procedures/TrailingNewlines.tid +22 -0
- package/editions/test/tiddlers/tests/data/transclude/CustomWidget-CodeblockOverride-TextParser.tid +20 -0
- package/editions/test/tiddlers/tests/data/transclude/CustomWidget-Simple-Indented.tid +33 -0
- package/editions/test/tiddlers/tests/data/transclude/Parameterised-Shortcut-ParametersIndented.tid +20 -0
- package/editions/test/tiddlers/tests/data/transclude/Procedures-Double-Underscore.tid +26 -0
- package/editions/test/tiddlers/tests/data/transclude/Variable-Refreshing.tid +27 -0
- package/editions/test/tiddlers/tests/data/transclude/Variable-Static.tid +15 -0
- package/editions/test/tiddlers/tests/data/widgets/DataAttributes/ButtonWidget-DataAttributes.tid +27 -0
- package/editions/test/tiddlers/tests/data/widgets/DataAttributes/CheckboxWidget-DataAttributes.tid +22 -0
- package/editions/test/tiddlers/tests/data/widgets/DataAttributes/DraggableWidget-DataAttributes.tid +27 -0
- package/editions/test/tiddlers/tests/data/widgets/DataAttributes/DroppableWidget-DataAttributes.tid +27 -0
- package/editions/test/tiddlers/tests/data/widgets/DataAttributes/LinkWidget-DataAttributes.tid +27 -0
- package/editions/test/tiddlers/tests/data/widgets/DataAttributes/OrderedStyleAttributes.tid +15 -0
- package/editions/test/tiddlers/tests/data/widgets/DataAttributes/SelectWidget-DataAttributes.tid +27 -0
- package/editions/test/tiddlers/tests/data/widgets/ElementWidgetEventAttributes.tid +15 -0
- package/editions/test/tiddlers/tests/data/widgets/ElementWidgetStyleAttributes.tid +15 -0
- package/editions/test/tiddlers/tests/data/widgets/SubstitutedAttributes.tid +5 -3
- package/editions/test/tiddlers/tests/test-filters.js +5 -4
- package/editions/test/tiddlers/tests/test-json-filters.js +40 -0
- package/editions/test/tiddlers/tests/test-utils.js +23 -0
- package/editions/test/tiddlers/tests/test-widget.js +62 -0
- package/editions/tw.org/tiddlers/$__favicon.ico.png +0 -0
- package/editions/tw.org/tiddlywiki.info +1 -1
- package/editions/tw5.com/tiddlers/_tw_shared/favicons/classic.tiddlywiki.com.png +0 -0
- package/editions/tw5.com/tiddlers/_tw_shared/favicons/{classic.tiddlywiki.com.ico.meta → classic.tiddlywiki.com.png.meta} +1 -1
- package/editions/tw5.com/tiddlers/_tw_shared/favicons/links.tiddlywiki.org.png +0 -0
- package/editions/tw5.com/tiddlers/_tw_shared/favicons/{links.tiddlywiki.org.ico.meta → links.tiddlywiki.org.png.meta} +1 -1
- package/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.dev.png +0 -0
- package/editions/tw5.com/tiddlers/_tw_shared/favicons/{tiddlywiki.com.dev.ico.meta → tiddlywiki.com.dev.png.meta} +1 -1
- package/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.png +0 -0
- package/editions/tw5.com/tiddlers/_tw_shared/favicons/{tiddlywiki.com.ico.meta → tiddlywiki.com.png.meta} +1 -1
- package/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.prerelease.png +0 -0
- package/editions/tw5.com/tiddlers/_tw_shared/favicons/{tiddlywiki.com.prerelease.ico.meta → tiddlywiki.com.prerelease.png.meta} +1 -1
- package/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.upgrade.png +0 -0
- package/editions/tw5.com/tiddlers/_tw_shared/favicons/{tiddlywiki.com.upgrade.ico.meta → tiddlywiki.com.upgrade.png.meta} +1 -1
- package/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.org.png +0 -0
- package/editions/tw5.com/tiddlers/about/Archive.tid +82 -0
- package/editions/tw5.com/tiddlers/community/Chinese Community.tid +20 -0
- package/editions/tw5.com/tiddlers/community/editions/Tidme by oflg.tid +16 -0
- package/editions/tw5.com/tiddlers/community/plugins/FSRS4TW by oflg.tid +10 -0
- package/editions/tw5.com/tiddlers/community/resources/TiddlyWiki Posts.tid +3 -3
- package/editions/tw5.com/tiddlers/community/resources/_Timimi_ Extension and executable by Riz.tid +3 -1
- package/editions/tw5.com/tiddlers/community/tutorials/GitHub Saver Tutorial by Mohammad.tid +5 -5
- package/editions/tw5.com/tiddlers/concepts/Macros.tid +7 -3
- package/editions/tw5.com/tiddlers/concepts/Title List.tid +5 -1
- package/editions/tw5.com/tiddlers/definitions/Git.tid +9 -0
- package/editions/tw5.com/tiddlers/definitions/GitHub.tid +6 -4
- package/editions/tw5.com/tiddlers/definitions/GitLab.tid +13 -0
- package/editions/tw5.com/tiddlers/demonstrations/TableOfContents/Fourth.tid +2 -0
- package/editions/tw5.com/tiddlers/demonstrations/TableOfContents/SecondThreeThree.tid +11 -1
- package/editions/tw5.com/tiddlers/demonstrations/TableOfContents/Third.tid +2 -0
- package/editions/tw5.com/tiddlers/filters/decodebase64 Operator.tid +6 -1
- package/editions/tw5.com/tiddlers/filters/encodebase64 Operator.tid +6 -1
- package/editions/tw5.com/tiddlers/filters/examples/jsonset.tid +59 -0
- package/editions/tw5.com/tiddlers/filters/examples/jsonstringify Operator (Examples).tid +7 -5
- package/editions/tw5.com/tiddlers/filters/examples/stringify_Operator_(Examples).tid +5 -3
- package/editions/tw5.com/tiddlers/filters/jsonextract.tid +8 -0
- package/editions/tw5.com/tiddlers/filters/jsonget.tid +8 -0
- package/editions/tw5.com/tiddlers/filters/jsonset.tid +64 -0
- package/editions/tw5.com/tiddlers/filters/jsonstringify Operator.tid +14 -15
- package/editions/tw5.com/tiddlers/filters/jsontype.tid +8 -0
- package/editions/tw5.com/tiddlers/filters/stringify_Operator.tid +12 -15
- package/editions/tw5.com/tiddlers/filters/substitute Operator.tid +3 -3
- package/editions/tw5.com/tiddlers/filters/syntax/Filter Expression.tid +1 -1
- package/editions/tw5.com/tiddlers/hellothere/HelloThere.tid +6 -1
- package/editions/tw5.com/tiddlers/howtos/Constructing JSON tiddlers.tid +3 -3
- package/editions/tw5.com/tiddlers/images/Favicon template.svg +296 -0
- package/editions/tw5.com/tiddlers/images/Favicon template.svg.meta +3 -0
- package/editions/tw5.com/tiddlers/images/New Release Banner.png +0 -0
- package/editions/tw5.com/tiddlers/images/{New Release Banner.jpg.meta → New Release Banner.png.meta } +1 -1
- package/editions/tw5.com/tiddlers/images/favicon.png +0 -0
- package/editions/tw5.com/tiddlers/images/favicon.png.meta +2 -0
- package/editions/tw5.com/tiddlers/images/green_favicon.png +0 -0
- package/editions/tw5.com/tiddlers/images/green_favicon.png.meta +2 -0
- package/editions/tw5.com/tiddlers/macros/CoreMacros.tid +1 -1
- package/editions/tw5.com/tiddlers/macros/TagMacro.tid +3 -1
- package/editions/tw5.com/tiddlers/macros/examples/tag.tid +22 -1
- package/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-close-window.tid +2 -2
- package/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-download-file.tid +3 -3
- package/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-edit-bitmap-operation.tid +3 -3
- package/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-edit-text-operation.tid +2 -2
- package/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-focus-selector.tid +2 -2
- package/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-http-request Example Random Dog.tid +90 -0
- package/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-http-request Example Zotero.tid +4 -3
- package/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-http-request.tid +4 -2
- package/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-modal.tid +2 -2
- package/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-new-tiddler.tid +3 -3
- package/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-notify.tid +3 -3
- package/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-open-external-window.tid +4 -3
- package/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-open-window.tid +12 -5
- package/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-permalink.tid +1 -1
- package/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-save-wiki.tid +3 -3
- package/editions/tw5.com/tiddlers/pragmas/Pragma_ _procedure.tid +2 -2
- package/editions/tw5.com/tiddlers/pragmas/Pragma_ _rules.tid +2 -2
- package/editions/tw5.com/tiddlers/pragmas/Pragma_ _whitespace.tid +7 -3
- package/editions/tw5.com/tiddlers/pragmas/Pragmas.tid +3 -1
- package/editions/tw5.com/tiddlers/procedures/Procedure Definitions.tid +4 -2
- package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.0.tid +1 -0
- package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.1.tid +1 -0
- package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.10.tid +1 -0
- package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.11.tid +1 -0
- package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.12.tid +1 -0
- package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.13.tid +1 -0
- package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.14.tid +1 -0
- package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.15.tid +1 -0
- package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.16.tid +1 -0
- package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.17.tid +1 -0
- package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.18.tid +1 -0
- package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.19.tid +1 -0
- package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.2.tid +1 -0
- package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.20.tid +1 -0
- package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.21.tid +1 -0
- package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.22.tid +1 -0
- package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.23.tid +1 -0
- package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.3.tid +1 -0
- package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.4.tid +1 -0
- package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.5.tid +1 -0
- package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.6.tid +1 -0
- package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.7.tid +1 -0
- package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.8.tid +1 -0
- package/editions/tw5.com/tiddlers/releasenotes/Release 5.1.9.tid +1 -0
- package/editions/tw5.com/tiddlers/releasenotes/Release 5.2.0.tid +1 -0
- package/editions/tw5.com/tiddlers/releasenotes/Release 5.2.1.tid +1 -0
- package/editions/tw5.com/tiddlers/releasenotes/Release 5.2.2.tid +1 -0
- package/editions/tw5.com/tiddlers/releasenotes/Release 5.2.3.tid +1 -0
- package/editions/tw5.com/tiddlers/releasenotes/Release 5.2.4.tid +1 -0
- package/editions/tw5.com/tiddlers/releasenotes/Release 5.2.5.tid +1 -0
- package/editions/tw5.com/tiddlers/releasenotes/Release 5.2.6.tid +1 -0
- package/editions/tw5.com/tiddlers/releasenotes/Release 5.2.7.tid +1 -0
- package/editions/tw5.com/tiddlers/releasenotes/Release 5.3.0.tid +1 -0
- package/editions/tw5.com/tiddlers/releasenotes/Release 5.3.1.tid +87 -0
- package/editions/tw5.com/tiddlers/releasenotes/Release 5.3.2.tid +184 -0
- package/editions/tw5.com/tiddlers/releasenotes/Releases.tid +4 -2
- package/editions/tw5.com/tiddlers/releasenotes/TiddlyWiki Releases.tid +1 -1
- package/editions/tw5.com/tiddlers/{Saving on Browser with TiddlyStow.tid → saving/Saving on Browser with TiddlyStow.tid } +2 -2
- package/editions/tw5.com/tiddlers/saving/Saving to a Git service.tid +5 -1
- package/editions/tw5.com/tiddlers/saving/Saving via a Minimal Web Server.tid +8 -11
- package/editions/tw5.com/tiddlers/system/tw5.com-styles.tid +5 -0
- package/editions/tw5.com/tiddlers/systemtags/SystemTag_ $__tags_Macro.tid +1 -1
- package/editions/tw5.com/tiddlers/variables/Behaviour of invoked variables depends on how the variable was declared.tid +52 -0
- package/editions/tw5.com/tiddlers/variables/Behaviour of variables invoked via filter expression function call.tid +10 -0
- package/editions/tw5.com/tiddlers/variables/Behaviour of variables invoked via filter operator parameter.tid +11 -0
- package/editions/tw5.com/tiddlers/variables/Behaviour of variables invoked via normal wikitext.tid +11 -0
- package/editions/tw5.com/tiddlers/variables/Behaviour of variables invoked via widget attributes.tid +11 -0
- package/editions/tw5.com/tiddlers/variables/Variable Usage.tid +5 -49
- package/editions/tw5.com/tiddlers/widgets/ActionListopsWidget.tid +24 -2
- package/editions/tw5.com/tiddlers/widgets/ActionPopupWidget.tid +2 -2
- package/editions/tw5.com/tiddlers/widgets/BrowseWidget.tid +3 -1
- package/editions/tw5.com/tiddlers/widgets/ButtonWidget.tid +3 -1
- package/editions/tw5.com/tiddlers/widgets/CheckboxWidget.tid +3 -1
- package/editions/tw5.com/tiddlers/widgets/Custom Widgets.tid +3 -1
- package/editions/tw5.com/tiddlers/widgets/DraggableWidget.tid +3 -2
- package/editions/tw5.com/tiddlers/widgets/DroppableWidget.tid +3 -1
- package/editions/tw5.com/tiddlers/widgets/GenesisWidget.tid +1 -1
- package/editions/tw5.com/tiddlers/widgets/ImageWidget.tid +2 -1
- package/editions/tw5.com/tiddlers/widgets/LinkWidget.tid +3 -1
- package/editions/tw5.com/tiddlers/widgets/ListWidget.tid +27 -2
- package/editions/tw5.com/tiddlers/widgets/RadioWidget.tid +3 -1
- package/editions/tw5.com/tiddlers/widgets/RangeWidget.tid +3 -1
- package/editions/tw5.com/tiddlers/widgets/ScrollableWidget.tid +27 -2
- package/editions/tw5.com/tiddlers/widgets/SelectWidget.tid +4 -1
- package/editions/tw5.com/tiddlers/widgets/SetWidget.tid +17 -1
- package/editions/tw5.com/tiddlers/widgets/TranscludeWidget.tid +2 -2
- package/editions/tw5.com/tiddlers/widgets/examples/ActionListopsWidget (Examples).tid +12 -1
- package/editions/tw5.com/tiddlers/wikitext/Anchor Links using HTML.tid +1 -1
- package/editions/tw5.com/tiddlers/wikitext/Conditional Shortcut Syntax.tid +62 -0
- package/editions/tw5.com/tiddlers/wikitext/Styles and Classes in WikiText.tid +52 -19
- package/editions/tw5.com/tiddlers/wikitext/Transclusion and Substitution.tid +3 -3
- package/editions/tw5.com/tiddlers/wikitext/Variable Attribute Values.tid +5 -2
- package/editions/tw5.com/tiddlers/wikitext/Widget Attributes.tid +8 -3
- package/editions/tw5.com/tiddlers/wikitext/Widgets in WikiText.tid +1 -0
- package/editions/tw5.com/tiddlywiki.info +9 -3
- package/editions/tw5.com-server/tiddlers/system/tiddlywiki.com.server.png +0 -0
- package/editions/tw5.com-server/tiddlers/system/tiddlywiki.com.server.png.meta +2 -0
- package/editions/zh-Hans/tiddlers/images/favicon.png +0 -0
- package/editions/zh-Hans/tiddlers/images/favicon.png.meta +2 -0
- package/editions/zh-Hans/tiddlers/images/green_favicon.png +0 -0
- package/editions/zh-Hans/tiddlers/images/green_favicon.png.meta +2 -0
- package/editions/zh-Hant/tiddlers/images/favicon.png +0 -0
- package/editions/zh-Hant/tiddlers/images/favicon.png.meta +2 -0
- package/editions/zh-Hant/tiddlers/images/green_favicon.png +0 -0
- package/editions/zh-Hant/tiddlers/images/green_favicon.png.meta +2 -0
- package/languages/de-DE/Exporters.multids +1 -1
- package/languages/de-DE/Help/commands.tid +2 -2
- package/languages/de-DE/Help/server.tid +1 -1
- package/languages/de-DE/Types/image_x-icon.tid +1 -1
- package/languages/es-ES/Buttons.multids +2 -0
- package/languages/es-ES/Fields.multids +4 -0
- package/languages/es-ES/Help/listen.tid +1 -1
- package/languages/es-ES/Help/savewikifolder.tid +16 -1
- package/languages/es-ES/Help/server.tid +1 -1
- package/languages/es-ES/Misc.multids +3 -0
- package/languages/es-ES/SiteTitle.tid +1 -1
- package/languages/pl-PL/Exporters.multids +1 -1
- package/languages/pl-PL/Help/commands.tid +1 -1
- package/languages/pl-PL/Help/savewikifolder.tid +19 -4
- package/languages/pl-PL/Help/server.tid +1 -1
- package/languages/zh-Hans/Exporters.multids +1 -1
- package/languages/zh-Hans/Help/commands.tid +1 -1
- package/languages/zh-Hans/Help/savewikifolder.tid +5 -1
- package/languages/zh-Hans/Help/server.tid +1 -1
- package/languages/zh-Hans/Types/image_svg_xml.tid +1 -1
- package/languages/zh-Hans/Types/image_x-icon.tid +1 -1
- package/languages/zh-Hant/Exporters.multids +1 -1
- package/languages/zh-Hant/Help/commands.tid +1 -1
- package/languages/zh-Hant/Help/savewikifolder.tid +5 -1
- package/languages/zh-Hant/Help/server.tid +1 -1
- package/languages/zh-Hant/Types/image_svg_xml.tid +1 -1
- package/languages/zh-Hant/Types/image_x-icon.tid +1 -1
- package/licenses/cla-individual.md +20 -0
- package/package.json +4 -1
- package/playwright.config.js +46 -0
- package/plugins/tiddlywiki/codemirror/styles.tid +5 -0
- package/plugins/tiddlywiki/comments/styles.tid +8 -8
- package/plugins/tiddlywiki/dynannotate/docs/readme.tid +1 -0
- package/plugins/tiddlywiki/dynannotate/modules/dynannotate.js +28 -27
- package/plugins/tiddlywiki/evernote/modules/enex-deserializer.js +82 -23
- package/plugins/tiddlywiki/evernote/readme.tid +1 -0
- package/plugins/tiddlywiki/evernote/samples/sample-enex-with-image.xml.enex +2 -2
- package/plugins/tiddlywiki/googleanalytics/googleanalytics.js +1 -1
- package/plugins/tiddlywiki/googleanalytics/settings.tid +1 -3
- package/plugins/tiddlywiki/jasmine/jasmine-plugin.js +9 -2
- package/plugins/tiddlywiki/jasmine/run-wiki-based-tests.js +1 -1
- package/plugins/tiddlywiki/jasmine/startup.js +2 -1
- package/plugins/tiddlywiki/qrcode/barcodereader.js +90 -0
- package/plugins/tiddlywiki/qrcode/docs/barcodereader.tid +44 -0
- package/plugins/tiddlywiki/qrcode/{doc/usage.tid → docs/makeqr.tid} +4 -4
- package/plugins/tiddlywiki/qrcode/docs.tid +3 -0
- package/plugins/tiddlywiki/qrcode/{MakeContactQR.tid → examples/make/MakeContactQR.tid} +1 -1
- package/plugins/tiddlywiki/qrcode/{MakeGenericQR.tid → examples/make/MakeGenericQR.tid} +1 -1
- package/plugins/tiddlywiki/qrcode/{MakeWifiQR.tid → examples/make/MakeWifiQR.tid} +1 -1
- package/plugins/tiddlywiki/qrcode/examples/make/make.tid +5 -0
- package/plugins/tiddlywiki/qrcode/examples/read/BarCodeReader.tid +17 -0
- package/plugins/tiddlywiki/qrcode/examples/read/read.tid +5 -0
- package/plugins/tiddlywiki/qrcode/examples.tid +3 -0
- package/plugins/tiddlywiki/qrcode/files/html5-qrcode/LICENSE +201 -0
- package/plugins/tiddlywiki/qrcode/files/html5-qrcode/README.md +398 -0
- package/plugins/tiddlywiki/qrcode/files/html5-qrcode/html5-qrcode.min.js +1 -0
- package/plugins/tiddlywiki/qrcode/files/tiddlywiki.files +20 -4
- package/plugins/tiddlywiki/qrcode/makeqr.js +1 -1
- package/plugins/tiddlywiki/qrcode/plugin.info +1 -1
- package/plugins/tiddlywiki/qrcode/readme.tid +15 -0
- package/plugins/tiddlywiki/tiddlyweb/html-json-skinny-tiddler.tid +0 -1
- package/plugins/tiddlywiki/tiddlyweb/html-json-tiddler.tid +1 -2
- package/plugins/tiddlywiki/upgrade/UpgradeWizard.tid +2 -2
- package/plugins/tiddlywiki/upgrade/favicon.png +0 -0
- package/plugins/tiddlywiki/upgrade/favicon.png.meta +2 -0
- package/readme.md +1 -1
- package/themes/tiddlywiki/vanilla/base.tid +45 -14
- package/themes/tiddlywiki/vanilla/settings.multids +1 -1
- package/editions/de-AT-server/tiddlers/system/favicon.ico +0 -0
- package/editions/dev/tiddlers/images/favicon.ico +0 -0
- package/editions/es-ES/tiddlers/images/favicon.ico +0 -0
- package/editions/es-ES/tiddlers/images/green_favicon.ico +0 -0
- package/editions/es-ES-server/tiddlers/system/favicon.ico +0 -0
- package/editions/fr-FR/tiddlers/images/favicon.ico +0 -0
- package/editions/fr-FR/tiddlers/images/favicon.ico.meta +0 -2
- package/editions/fr-FR/tiddlers/images/green_favicon.ico +0 -0
- package/editions/fr-FR-server/tiddlers/system/favicon.ico +0 -0
- package/editions/fr-FR-server/tiddlers/system/favicon.ico.meta +0 -2
- package/editions/ja-JP/tiddlers/images/favicon.ico +0 -0
- package/editions/ja-JP/tiddlers/images/favicon.ico.meta +0 -2
- package/editions/ja-JP/tiddlers/images/green_favicon.ico +0 -0
- package/editions/ko-KR/tiddlers/images/favicon.ico +0 -0
- package/editions/ko-KR/tiddlers/images/favicon.ico.meta +0 -2
- package/editions/ko-KR/tiddlers/images/green_favicon.ico +0 -0
- package/editions/ko-KR-server/tiddlers/system/favicon.ico +0 -0
- package/editions/ko-KR-server/tiddlers/system/favicon.ico.meta +0 -2
- package/editions/prerelease/tiddlers/system/favicon.ico +0 -0
- package/editions/prerelease/tiddlers/system/favicon.ico.meta +0 -2
- package/editions/tw5.com/tiddlers/_tw_shared/favicons/classic.tiddlywiki.com.ico +0 -0
- package/editions/tw5.com/tiddlers/_tw_shared/favicons/links.tiddlywiki.org.ico +0 -0
- package/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.dev.ico +0 -0
- package/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.ico +0 -0
- package/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.prerelease.ico +0 -0
- package/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.upgrade.ico +0 -0
- package/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.org.ico +0 -0
- package/editions/tw5.com/tiddlers/community/editions/TiddlyMemo by oflg.tid +0 -16
- package/editions/tw5.com/tiddlers/community/tutorials/Install and run TiddlyWiki on a CentOS 6 VPS using Nginx.tid +0 -16
- package/editions/tw5.com/tiddlers/images/New Release Banner.jpg +0 -0
- package/editions/tw5.com/tiddlers/images/favicon.ico +0 -0
- package/editions/tw5.com/tiddlers/images/favicon.ico.meta +0 -2
- package/editions/tw5.com/tiddlers/images/green_favicon.ico +0 -0
- package/editions/tw5.com/tiddlers/images/green_favicon.ico.meta +0 -2
- package/editions/tw5.com-server/tiddlers/system/favicon.ico +0 -0
- package/editions/tw5.com-server/tiddlers/system/favicon.ico.meta +0 -2
- package/editions/zh-Hans/tiddlers/images/favicon.ico +0 -0
- package/editions/zh-Hans/tiddlers/images/favicon.ico.meta +0 -2
- package/editions/zh-Hans/tiddlers/images/green_favicon.ico +0 -0
- package/editions/zh-Hans/tiddlers/images/green_favicon.ico.meta +0 -2
- package/editions/zh-Hant/tiddlers/images/favicon.ico +0 -0
- package/editions/zh-Hant/tiddlers/images/favicon.ico.meta +0 -2
- package/editions/zh-Hant/tiddlers/images/green_favicon.ico +0 -0
- package/editions/zh-Hant/tiddlers/images/green_favicon.ico.meta +0 -2
- package/plugins/tiddlywiki/qrcode/doc/examples.tid +0 -3
- package/plugins/tiddlywiki/qrcode/doc/readme.tid +0 -13
- package/plugins/tiddlywiki/upgrade/favicon.ico +0 -0
- package/plugins/tiddlywiki/upgrade/favicon.ico.meta +0 -2
- /package/editions/tw5.com/tiddlers/_tw_shared/favicons/{tiddlywiki.org.ico.meta → tiddlywiki.org.png.meta} +0 -0
- /package/plugins/tiddlywiki/qrcode/files/{LICENSE → qrcode/LICENSE} +0 -0
- /package/plugins/tiddlywiki/qrcode/files/{README.md → qrcode/README.md} +0 -0
- /package/plugins/tiddlywiki/qrcode/files/{qrcode.js → qrcode/qrcode.js} +0 -0
@@ -104,7 +104,11 @@ TW_Element.prototype.setAttribute = function(name,value) {
|
|
104
104
|
if(this.isRaw) {
|
105
105
|
throw "Cannot setAttribute on a raw TW_Element";
|
106
106
|
}
|
107
|
-
|
107
|
+
if(name === "style") {
|
108
|
+
this.style = value;
|
109
|
+
} else {
|
110
|
+
this.attributes[name] = value + "";
|
111
|
+
}
|
108
112
|
};
|
109
113
|
|
110
114
|
TW_Element.prototype.setAttributeNS = function(namespace,name,value) {
|
@@ -819,18 +819,41 @@ exports.hashString = function(str) {
|
|
819
819
|
},0);
|
820
820
|
};
|
821
821
|
|
822
|
+
/*
|
823
|
+
Base64 utility functions that work in either browser or Node.js
|
824
|
+
*/
|
825
|
+
if(typeof window !== 'undefined') {
|
826
|
+
exports.btoa = function(binstr) { return window.btoa(binstr); }
|
827
|
+
exports.atob = function(b64) { return window.atob(b64); }
|
828
|
+
} else {
|
829
|
+
exports.btoa = function(binstr) {
|
830
|
+
return Buffer.from(binstr, 'binary').toString('base64');
|
831
|
+
}
|
832
|
+
exports.atob = function(b64) {
|
833
|
+
return Buffer.from(b64, 'base64').toString('binary');
|
834
|
+
}
|
835
|
+
}
|
836
|
+
|
822
837
|
/*
|
823
838
|
Decode a base64 string
|
824
839
|
*/
|
825
|
-
exports.base64Decode = function(string64) {
|
826
|
-
|
840
|
+
exports.base64Decode = function(string64,binary,urlsafe) {
|
841
|
+
var encoded = urlsafe ? string64.replace(/_/g,'/').replace(/-/g,'+') : string64;
|
842
|
+
if(binary) return exports.atob(encoded)
|
843
|
+
else return base64utf8.base64.decode.call(base64utf8,encoded);
|
827
844
|
};
|
828
845
|
|
829
846
|
/*
|
830
847
|
Encode a string to base64
|
831
848
|
*/
|
832
|
-
exports.base64Encode = function(string64) {
|
833
|
-
|
849
|
+
exports.base64Encode = function(string64,binary,urlsafe) {
|
850
|
+
var encoded;
|
851
|
+
if(binary) encoded = exports.btoa(string64);
|
852
|
+
else encoded = base64utf8.base64.encode.call(base64utf8,string64);
|
853
|
+
if(urlsafe) {
|
854
|
+
encoded = encoded.replace(/\+/g,'-').replace(/\//g,'_');
|
855
|
+
}
|
856
|
+
return encoded;
|
834
857
|
};
|
835
858
|
|
836
859
|
/*
|
@@ -70,6 +70,11 @@ BrowseWidget.prototype.render = function(parent,nextSibling) {
|
|
70
70
|
}
|
71
71
|
return false;
|
72
72
|
},false);
|
73
|
+
// Assign data- attributes
|
74
|
+
this.assignAttributes(domNode,{
|
75
|
+
sourcePrefix: "data-",
|
76
|
+
destPrefix: "data-"
|
77
|
+
});
|
73
78
|
// Insert element
|
74
79
|
parent.insertBefore(domNode,nextSibling);
|
75
80
|
this.renderChildren(domNode,null);
|
@@ -95,6 +100,11 @@ BrowseWidget.prototype.execute = function() {
|
|
95
100
|
Selectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering
|
96
101
|
*/
|
97
102
|
BrowseWidget.prototype.refresh = function(changedTiddlers) {
|
103
|
+
var changedAttributes = this.computeAttributes();
|
104
|
+
if($tw.utils.count(changedAttributes) > 0) {
|
105
|
+
this.refreshSelf();
|
106
|
+
return true;
|
107
|
+
}
|
98
108
|
return false;
|
99
109
|
};
|
100
110
|
|
@@ -59,6 +59,11 @@ ButtonWidget.prototype.render = function(parent,nextSibling) {
|
|
59
59
|
$tw.utils.pushTop(classes,"tc-popup-handle");
|
60
60
|
}
|
61
61
|
domNode.className = classes.join(" ");
|
62
|
+
// Assign data- attributes
|
63
|
+
this.assignAttributes(domNode,{
|
64
|
+
sourcePrefix: "data-",
|
65
|
+
destPrefix: "data-"
|
66
|
+
});
|
62
67
|
// Assign other attributes
|
63
68
|
if(this.style) {
|
64
69
|
domNode.setAttribute("style",this.style);
|
@@ -250,7 +255,7 @@ ButtonWidget.prototype.updateDomNodeClasses = function() {
|
|
250
255
|
//Add new classes from updated class attribute.
|
251
256
|
$tw.utils.pushTop(domNodeClasses,newClasses);
|
252
257
|
this.domNode.className = domNodeClasses.join(" ");
|
253
|
-
}
|
258
|
+
};
|
254
259
|
|
255
260
|
/*
|
256
261
|
Selectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering
|
@@ -260,8 +265,15 @@ ButtonWidget.prototype.refresh = function(changedTiddlers) {
|
|
260
265
|
if(changedAttributes.actions || changedAttributes.to || changedAttributes.message || changedAttributes.param || changedAttributes.set || changedAttributes.setTo || changedAttributes.popup || changedAttributes.hover || changedAttributes.selectedClass || changedAttributes.style || changedAttributes.dragFilter || changedAttributes.dragTiddler || (this.set && changedTiddlers[this.set]) || (this.popup && changedTiddlers[this.popup]) || (this.popupTitle && changedTiddlers[this.popupTitle]) || changedAttributes.popupAbsCoords || changedAttributes.setTitle || changedAttributes.setField || changedAttributes.setIndex || changedAttributes.popupTitle || changedAttributes.disabled || changedAttributes["default"]) {
|
261
266
|
this.refreshSelf();
|
262
267
|
return true;
|
263
|
-
} else
|
264
|
-
|
268
|
+
} else {
|
269
|
+
if(changedAttributes["class"]) {
|
270
|
+
this.updateDomNodeClasses();
|
271
|
+
}
|
272
|
+
this.assignAttributes(this.domNodes[0],{
|
273
|
+
changedAttributes: changedAttributes,
|
274
|
+
sourcePrefix: "data-",
|
275
|
+
destPrefix: "data-"
|
276
|
+
});
|
265
277
|
}
|
266
278
|
return this.refreshChildren(changedTiddlers);
|
267
279
|
};
|
@@ -53,6 +53,11 @@ CheckboxWidget.prototype.render = function(parent,nextSibling) {
|
|
53
53
|
this.labelDomNode.appendChild(this.inputDomNode);
|
54
54
|
this.spanDomNode = this.document.createElement("span");
|
55
55
|
this.labelDomNode.appendChild(this.spanDomNode);
|
56
|
+
// Assign data- attributes
|
57
|
+
this.assignAttributes(this.inputDomNode,{
|
58
|
+
sourcePrefix: "data-",
|
59
|
+
destPrefix: "data-"
|
60
|
+
});
|
56
61
|
// Add a click event handler
|
57
62
|
$tw.utils.addEventListeners(this.inputDomNode,[
|
58
63
|
{name: "change", handlerObject: this, handlerMethod: "handleChangeEvent"}
|
@@ -116,7 +121,7 @@ CheckboxWidget.prototype.getValue = function() {
|
|
116
121
|
} else {
|
117
122
|
list = $tw.utils.parseStringArray(this.checkboxDefault || "") || [];
|
118
123
|
}
|
119
|
-
} else if
|
124
|
+
} else if(this.checkboxListIndex) {
|
120
125
|
list = $tw.utils.parseStringArray(this.wiki.extractTiddlerDataItem(tiddler,this.checkboxListIndex,this.checkboxDefault || "")) || [];
|
121
126
|
} else {
|
122
127
|
list = this.wiki.filterTiddlers(this.checkboxFilter,this) || [];
|
@@ -215,6 +220,8 @@ CheckboxWidget.prototype.handleChangeEvent = function(event) {
|
|
215
220
|
if($tw.utils.isArray(fieldContents)) {
|
216
221
|
// Make a copy so we can modify it without changing original that's refrenced elsewhere
|
217
222
|
listContents = fieldContents.slice(0);
|
223
|
+
} else if(fieldContents === undefined) {
|
224
|
+
listContents = [];
|
218
225
|
} else if(typeof fieldContents === "string") {
|
219
226
|
listContents = $tw.utils.parseStringArray(fieldContents);
|
220
227
|
// No need to copy since parseStringArray returns a fresh array, not refrenced elsewhere
|
@@ -323,6 +330,11 @@ CheckboxWidget.prototype.refresh = function(changedTiddlers) {
|
|
323
330
|
$tw.utils.removeClass(this.labelDomNode,"tc-checkbox-checked");
|
324
331
|
}
|
325
332
|
}
|
333
|
+
this.assignAttributes(this.inputDomNode,{
|
334
|
+
changedAttributes: changedAttributes,
|
335
|
+
sourcePrefix: "data-",
|
336
|
+
destPrefix: "data-"
|
337
|
+
});
|
326
338
|
return this.refreshChildren(changedTiddlers) || refreshed;
|
327
339
|
}
|
328
340
|
};
|
@@ -330,3 +342,4 @@ CheckboxWidget.prototype.refresh = function(changedTiddlers) {
|
|
330
342
|
exports.checkbox = CheckboxWidget;
|
331
343
|
|
332
344
|
})();
|
345
|
+
|
@@ -52,6 +52,11 @@ DraggableWidget.prototype.render = function(parent,nextSibling) {
|
|
52
52
|
classes.push("tc-draggable");
|
53
53
|
}
|
54
54
|
domNode.setAttribute("class",classes.join(" "));
|
55
|
+
// Assign data- attributes and style. attributes
|
56
|
+
this.assignAttributes(domNode,{
|
57
|
+
sourcePrefix: "data-",
|
58
|
+
destPrefix: "data-"
|
59
|
+
});
|
55
60
|
// Insert the node into the DOM and render any children
|
56
61
|
parent.insertBefore(domNode,nextSibling);
|
57
62
|
this.renderChildren(domNode,null);
|
@@ -108,13 +113,19 @@ DraggableWidget.prototype.updateDomNodeClasses = function() {
|
|
108
113
|
Selectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering
|
109
114
|
*/
|
110
115
|
DraggableWidget.prototype.refresh = function(changedTiddlers) {
|
111
|
-
var changedAttributes = this.computeAttributes()
|
112
|
-
|
113
|
-
if(changedAttributesCount === 1 && changedAttributes["class"]) {
|
114
|
-
this.updateDomNodeClasses();
|
115
|
-
} else if(changedAttributesCount > 0) {
|
116
|
+
var changedAttributes = this.computeAttributes();
|
117
|
+
if(changedAttributes.tag || changedAttributes.selector || changedAttributes.dragimagetype || changedAttributes.enable || changedAttributes.startactions || changedAttributes.endactions) {
|
116
118
|
this.refreshSelf();
|
117
119
|
return true;
|
120
|
+
} else {
|
121
|
+
if(changedAttributes["class"]) {
|
122
|
+
this.assignDomNodeClasses();
|
123
|
+
}
|
124
|
+
this.assignAttributes(this.domNodes[0],{
|
125
|
+
changedAttributes: changedAttributes,
|
126
|
+
sourcePrefix: "data-",
|
127
|
+
destPrefix: "data-"
|
128
|
+
});
|
118
129
|
}
|
119
130
|
return this.refreshChildren(changedTiddlers);
|
120
131
|
};
|
@@ -42,6 +42,11 @@ DroppableWidget.prototype.render = function(parent,nextSibling) {
|
|
42
42
|
domNode = this.document.createElement(tag);
|
43
43
|
this.domNode = domNode;
|
44
44
|
this.assignDomNodeClasses();
|
45
|
+
// Assign data- attributes and style. attributes
|
46
|
+
this.assignAttributes(domNode,{
|
47
|
+
sourcePrefix: "data-",
|
48
|
+
destPrefix: "data-"
|
49
|
+
});
|
45
50
|
// Add event handlers
|
46
51
|
if(this.droppableEnable) {
|
47
52
|
$tw.utils.addEventListeners(domNode,[
|
@@ -166,8 +171,15 @@ DroppableWidget.prototype.refresh = function(changedTiddlers) {
|
|
166
171
|
if(changedAttributes.tag || changedAttributes.enable || changedAttributes.disabledClass || changedAttributes.actions || changedAttributes.effect) {
|
167
172
|
this.refreshSelf();
|
168
173
|
return true;
|
169
|
-
} else
|
170
|
-
|
174
|
+
} else {
|
175
|
+
if(changedAttributes["class"]) {
|
176
|
+
this.assignDomNodeClasses();
|
177
|
+
}
|
178
|
+
this.assignAttributes(this.domNodes[0],{
|
179
|
+
changedAttributes: changedAttributes,
|
180
|
+
sourcePrefix: "data-",
|
181
|
+
destPrefix: "data-"
|
182
|
+
});
|
171
183
|
}
|
172
184
|
return this.refreshChildren(changedTiddlers);
|
173
185
|
};
|
@@ -58,24 +58,25 @@ ImageWidget.prototype.render = function(parent,nextSibling) {
|
|
58
58
|
if(this.wiki.isImageTiddler(this.imageSource)) {
|
59
59
|
var type = tiddler.fields.type,
|
60
60
|
text = tiddler.fields.text,
|
61
|
-
_canonical_uri = tiddler.fields._canonical_uri
|
61
|
+
_canonical_uri = tiddler.fields._canonical_uri,
|
62
|
+
typeInfo = $tw.config.contentTypeInfo[type] || {},
|
63
|
+
deserializerType = typeInfo.deserializerType || type;
|
62
64
|
// If the tiddler has body text then it doesn't need to be lazily loaded
|
63
65
|
if(text) {
|
64
|
-
// Render the appropriate element for the image type
|
65
|
-
|
66
|
-
|
66
|
+
// Render the appropriate element for the image type by looking up the encoding in the content type info
|
67
|
+
var encoding = typeInfo.encoding || "utf8";
|
68
|
+
if (encoding === "base64") {
|
69
|
+
// .pdf .png .jpg etc.
|
70
|
+
src = "data:" + deserializerType + ";base64," + text;
|
71
|
+
if (deserializerType === "application/pdf") {
|
67
72
|
tag = "embed";
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
break;
|
73
|
-
default:
|
74
|
-
src = "data:" + type + ";base64," + text;
|
75
|
-
break;
|
73
|
+
}
|
74
|
+
} else {
|
75
|
+
// .svg .tid .xml etc.
|
76
|
+
src = "data:" + deserializerType + "," + encodeURIComponent(text);
|
76
77
|
}
|
77
78
|
} else if(_canonical_uri) {
|
78
|
-
switch(
|
79
|
+
switch(deserializerType) {
|
79
80
|
case "application/pdf":
|
80
81
|
tag = "embed";
|
81
82
|
src = _canonical_uri;
|
@@ -99,6 +100,9 @@ ImageWidget.prototype.render = function(parent,nextSibling) {
|
|
99
100
|
if(this.imageClass) {
|
100
101
|
domNode.setAttribute("class",this.imageClass);
|
101
102
|
}
|
103
|
+
if(this.imageUsemap) {
|
104
|
+
domNode.setAttribute("usemap",this.imageUsemap);
|
105
|
+
}
|
102
106
|
if(this.imageWidth) {
|
103
107
|
domNode.setAttribute("width",this.imageWidth);
|
104
108
|
}
|
@@ -138,6 +142,7 @@ ImageWidget.prototype.execute = function() {
|
|
138
142
|
this.imageWidth = this.getAttribute("width");
|
139
143
|
this.imageHeight = this.getAttribute("height");
|
140
144
|
this.imageClass = this.getAttribute("class");
|
145
|
+
this.imageUsemap = this.getAttribute("usemap");
|
141
146
|
this.imageTooltip = this.getAttribute("tooltip");
|
142
147
|
this.imageAlt = this.getAttribute("alt");
|
143
148
|
this.lazyLoading = this.getAttribute("loading");
|
@@ -148,7 +153,7 @@ Selectively refreshes the widget if needed. Returns true if the widget or any of
|
|
148
153
|
*/
|
149
154
|
ImageWidget.prototype.refresh = function(changedTiddlers) {
|
150
155
|
var changedAttributes = this.computeAttributes();
|
151
|
-
if(changedAttributes.source || changedAttributes.width || changedAttributes.height || changedAttributes["class"] || changedAttributes.tooltip || changedTiddlers[this.imageSource]) {
|
156
|
+
if(changedAttributes.source || changedAttributes.width || changedAttributes.height || changedAttributes["class"] || changedAttributes.usemap || changedAttributes.tooltip || changedTiddlers[this.imageSource]) {
|
152
157
|
this.refreshSelf();
|
153
158
|
return true;
|
154
159
|
} else {
|
@@ -49,7 +49,7 @@ ImportVariablesWidget.prototype.execute = function(tiddlerList) {
|
|
49
49
|
this.tiddlerList = tiddlerList || this.wiki.filterTiddlers(this.filter,this);
|
50
50
|
// Accumulate the <$set> widgets from each tiddler
|
51
51
|
$tw.utils.each(this.tiddlerList,function(title) {
|
52
|
-
var parser = widgetPointer.wiki.parseTiddler(title,{parseAsInline:true});
|
52
|
+
var parser = widgetPointer.wiki.parseTiddler(title,{parseAsInline:true, configTrimWhiteSpace:true});
|
53
53
|
if(parser) {
|
54
54
|
var parseTreeNode = parser.tree[0];
|
55
55
|
while(parseTreeNode && ["setvariable","set","parameters"].indexOf(parseTreeNode.type) !== -1) {
|
@@ -43,6 +43,11 @@ LinkWidget.prototype.render = function(parent,nextSibling) {
|
|
43
43
|
} else {
|
44
44
|
// Just insert the link text
|
45
45
|
var domNode = this.document.createElement("span");
|
46
|
+
// Assign data- attributes
|
47
|
+
this.assignAttributes(domNode,{
|
48
|
+
sourcePrefix: "data-",
|
49
|
+
destPrefix: "data-"
|
50
|
+
});
|
46
51
|
parent.insertBefore(domNode,nextSibling);
|
47
52
|
this.renderChildren(domNode,null);
|
48
53
|
this.domNodes.push(domNode);
|
@@ -138,6 +143,11 @@ LinkWidget.prototype.renderLink = function(parent,nextSibling) {
|
|
138
143
|
widget: this
|
139
144
|
});
|
140
145
|
}
|
146
|
+
// Assign data- attributes
|
147
|
+
this.assignAttributes(domNode,{
|
148
|
+
sourcePrefix: "data-",
|
149
|
+
destPrefix: "data-"
|
150
|
+
});
|
141
151
|
// Insert the link into the DOM and render any children
|
142
152
|
parent.insertBefore(domNode,nextSibling);
|
143
153
|
this.renderChildren(domNode,null);
|
@@ -207,8 +217,7 @@ Selectively refreshes the widget if needed. Returns true if the widget or any of
|
|
207
217
|
*/
|
208
218
|
LinkWidget.prototype.refresh = function(changedTiddlers) {
|
209
219
|
var changedAttributes = this.computeAttributes();
|
210
|
-
if(
|
211
|
-
changedAttributes["class"] || changedAttributes.tabindex || changedAttributes.draggable || changedAttributes.tag) {
|
220
|
+
if($tw.utils.count(changedAttributes) > 0) {
|
212
221
|
this.refreshSelf();
|
213
222
|
return true;
|
214
223
|
}
|
@@ -218,3 +227,4 @@ LinkWidget.prototype.refresh = function(changedTiddlers) {
|
|
218
227
|
exports.link = LinkWidget;
|
219
228
|
|
220
229
|
})();
|
230
|
+
|
@@ -28,6 +28,18 @@ Inherit from the base widget class
|
|
28
28
|
*/
|
29
29
|
ListWidget.prototype = new Widget();
|
30
30
|
|
31
|
+
ListWidget.prototype.initialise = function(parseTreeNode,options) {
|
32
|
+
// Bail if parseTreeNode is undefined, meaning that the ListWidget constructor was called without any arguments so that it can be subclassed
|
33
|
+
if(parseTreeNode === undefined) {
|
34
|
+
return;
|
35
|
+
}
|
36
|
+
// First call parent constructor to set everything else up
|
37
|
+
Widget.prototype.initialise.call(this,parseTreeNode,options);
|
38
|
+
// Now look for <$list-template> and <$list-empty> widgets as immediate child widgets
|
39
|
+
// This is safe to do during initialization because parse trees never change after creation
|
40
|
+
this.findExplicitTemplates();
|
41
|
+
}
|
42
|
+
|
31
43
|
/*
|
32
44
|
Render this widget into the DOM
|
33
45
|
*/
|
@@ -38,8 +50,8 @@ ListWidget.prototype.render = function(parent,nextSibling) {
|
|
38
50
|
$tw.modules.applyMethods("storyview",this.storyViews);
|
39
51
|
}
|
40
52
|
this.parentDomNode = parent;
|
41
|
-
this.computeAttributes();
|
42
|
-
this.execute();
|
53
|
+
var changedAttributes = this.computeAttributes();
|
54
|
+
this.execute(changedAttributes);
|
43
55
|
this.renderChildren(parent,nextSibling);
|
44
56
|
// Construct the storyview
|
45
57
|
var StoryView = this.storyViews[this.storyViewName];
|
@@ -59,7 +71,8 @@ ListWidget.prototype.render = function(parent,nextSibling) {
|
|
59
71
|
/*
|
60
72
|
Compute the internal state of the widget
|
61
73
|
*/
|
62
|
-
ListWidget.prototype.execute = function() {
|
74
|
+
ListWidget.prototype.execute = function(changedAttributes) {
|
75
|
+
var self = this;
|
63
76
|
// Get our attributes
|
64
77
|
this.template = this.getAttribute("template");
|
65
78
|
this.editTemplate = this.getAttribute("editTemplate");
|
@@ -67,6 +80,10 @@ ListWidget.prototype.execute = function() {
|
|
67
80
|
this.counterName = this.getAttribute("counter");
|
68
81
|
this.storyViewName = this.getAttribute("storyview");
|
69
82
|
this.historyTitle = this.getAttribute("history");
|
83
|
+
// Create join template only if needed
|
84
|
+
if(this.join === undefined || (changedAttributes && changedAttributes.join)) {
|
85
|
+
this.join = this.makeJoinTemplate();
|
86
|
+
}
|
70
87
|
// Compose the list elements
|
71
88
|
this.list = this.getTiddlerList();
|
72
89
|
var members = [],
|
@@ -85,18 +102,54 @@ ListWidget.prototype.execute = function() {
|
|
85
102
|
this.history = [];
|
86
103
|
};
|
87
104
|
|
105
|
+
ListWidget.prototype.findExplicitTemplates = function() {
|
106
|
+
var self = this;
|
107
|
+
this.explicitListTemplate = null;
|
108
|
+
this.explicitEmptyTemplate = null;
|
109
|
+
this.explicitJoinTemplate = null;
|
110
|
+
this.hasTemplateInBody = false;
|
111
|
+
var searchChildren = function(childNodes) {
|
112
|
+
$tw.utils.each(childNodes,function(node) {
|
113
|
+
if(node.type === "list-template") {
|
114
|
+
self.explicitListTemplate = node.children;
|
115
|
+
} else if(node.type === "list-empty") {
|
116
|
+
self.explicitEmptyTemplate = node.children;
|
117
|
+
} else if(node.type === "list-join") {
|
118
|
+
self.explicitJoinTemplate = node.children;
|
119
|
+
} else if(node.type === "element" && node.tag === "p") {
|
120
|
+
searchChildren(node.children);
|
121
|
+
} else {
|
122
|
+
self.hasTemplateInBody = true;
|
123
|
+
}
|
124
|
+
});
|
125
|
+
};
|
126
|
+
searchChildren(this.parseTreeNode.children);
|
127
|
+
}
|
128
|
+
|
88
129
|
ListWidget.prototype.getTiddlerList = function() {
|
130
|
+
var limit = $tw.utils.getInt(this.getAttribute("limit",""),undefined);
|
89
131
|
var defaultFilter = "[!is[system]sort[title]]";
|
90
|
-
|
132
|
+
var results = this.wiki.filterTiddlers(this.getAttribute("filter",defaultFilter),this);
|
133
|
+
if(limit !== undefined) {
|
134
|
+
if(limit >= 0) {
|
135
|
+
results = results.slice(0,limit);
|
136
|
+
} else {
|
137
|
+
results = results.slice(limit);
|
138
|
+
}
|
139
|
+
}
|
140
|
+
return results;
|
91
141
|
};
|
92
142
|
|
93
143
|
ListWidget.prototype.getEmptyMessage = function() {
|
94
144
|
var parser,
|
95
|
-
emptyMessage = this.getAttribute("emptyMessage"
|
96
|
-
//
|
97
|
-
|
98
|
-
|
99
|
-
|
145
|
+
emptyMessage = this.getAttribute("emptyMessage");
|
146
|
+
// If emptyMessage attribute is not present or empty then look for an explicit empty template
|
147
|
+
if(!emptyMessage) {
|
148
|
+
if(this.explicitEmptyTemplate) {
|
149
|
+
return this.explicitEmptyTemplate;
|
150
|
+
} else {
|
151
|
+
return [];
|
152
|
+
}
|
100
153
|
}
|
101
154
|
parser = this.wiki.parseText("text/vnd.tiddlywiki",emptyMessage,{parseAsInline: true});
|
102
155
|
if(parser) {
|
@@ -106,6 +159,24 @@ ListWidget.prototype.getEmptyMessage = function() {
|
|
106
159
|
}
|
107
160
|
};
|
108
161
|
|
162
|
+
/*
|
163
|
+
Compose the template for a join between list items
|
164
|
+
*/
|
165
|
+
ListWidget.prototype.makeJoinTemplate = function() {
|
166
|
+
var parser,
|
167
|
+
join = this.getAttribute("join","");
|
168
|
+
if(join) {
|
169
|
+
parser = this.wiki.parseText("text/vnd.tiddlywiki",join,{parseAsInline:true})
|
170
|
+
if(parser) {
|
171
|
+
return parser.tree;
|
172
|
+
} else {
|
173
|
+
return [];
|
174
|
+
}
|
175
|
+
} else {
|
176
|
+
return this.explicitJoinTemplate; // May be null, and that's fine
|
177
|
+
}
|
178
|
+
};
|
179
|
+
|
109
180
|
/*
|
110
181
|
Compose the template for a list item
|
111
182
|
*/
|
@@ -114,6 +185,7 @@ ListWidget.prototype.makeItemTemplate = function(title,index) {
|
|
114
185
|
var tiddler = this.wiki.getTiddler(title),
|
115
186
|
isDraft = tiddler && tiddler.hasField("draft.of"),
|
116
187
|
template = this.template,
|
188
|
+
join = this.join,
|
117
189
|
templateTree;
|
118
190
|
if(isDraft && this.editTemplate) {
|
119
191
|
template = this.editTemplate;
|
@@ -122,22 +194,29 @@ ListWidget.prototype.makeItemTemplate = function(title,index) {
|
|
122
194
|
if(template) {
|
123
195
|
templateTree = [{type: "transclude", attributes: {tiddler: {type: "string", value: template}}}];
|
124
196
|
} else {
|
197
|
+
// Check for child nodes of the list widget
|
125
198
|
if(this.parseTreeNode.children && this.parseTreeNode.children.length > 0) {
|
126
|
-
|
127
|
-
|
199
|
+
// Check for a <$list-item> widget
|
200
|
+
if(this.explicitListTemplate) {
|
201
|
+
templateTree = this.explicitListTemplate;
|
202
|
+
} else if(this.hasTemplateInBody) {
|
203
|
+
templateTree = this.parseTreeNode.children;
|
204
|
+
}
|
205
|
+
}
|
206
|
+
if(!templateTree || templateTree.length === 0) {
|
128
207
|
// Default template is a link to the title
|
129
208
|
templateTree = [{type: "element", tag: this.parseTreeNode.isBlock ? "div" : "span", children: [{type: "link", attributes: {to: {type: "string", value: title}}, children: [
|
130
|
-
|
209
|
+
{type: "text", text: title}
|
131
210
|
]}]}];
|
132
211
|
}
|
133
212
|
}
|
134
213
|
// Return the list item
|
135
|
-
var parseTreeNode = {type: "listitem", itemTitle: title, variableName: this.variableName, children: templateTree};
|
214
|
+
var parseTreeNode = {type: "listitem", itemTitle: title, variableName: this.variableName, children: templateTree, join: join};
|
215
|
+
parseTreeNode.isLast = index === this.list.length - 1;
|
136
216
|
if(this.counterName) {
|
137
217
|
parseTreeNode.counter = (index + 1).toString();
|
138
218
|
parseTreeNode.counterName = this.counterName;
|
139
219
|
parseTreeNode.isFirst = index === 0;
|
140
|
-
parseTreeNode.isLast = index === this.list.length - 1;
|
141
220
|
}
|
142
221
|
return parseTreeNode;
|
143
222
|
};
|
@@ -153,7 +232,7 @@ ListWidget.prototype.refresh = function(changedTiddlers) {
|
|
153
232
|
this.storyview.refreshStart(changedTiddlers,changedAttributes);
|
154
233
|
}
|
155
234
|
// Completely refresh if any of our attributes have changed
|
156
|
-
if(changedAttributes.filter || changedAttributes.variable || changedAttributes.counter || changedAttributes.template || changedAttributes.editTemplate || changedAttributes.emptyMessage || changedAttributes.storyview || changedAttributes.history) {
|
235
|
+
if(changedAttributes.filter || changedAttributes.variable || changedAttributes.counter || changedAttributes.template || changedAttributes.editTemplate || changedAttributes.join || changedAttributes.emptyMessage || changedAttributes.storyview || changedAttributes.history) {
|
157
236
|
this.refreshSelf();
|
158
237
|
result = true;
|
159
238
|
} else {
|
@@ -225,6 +304,8 @@ ListWidget.prototype.handleListChanges = function(changedTiddlers) {
|
|
225
304
|
// If we are providing an counter variable then we must refresh the items, otherwise we can rearrange them
|
226
305
|
var hasRefreshed = false,t;
|
227
306
|
if(this.counterName) {
|
307
|
+
var mustRefreshOldLast = false;
|
308
|
+
var oldLength = this.children.length;
|
228
309
|
// Cycle through the list and remove and re-insert the first item that has changed, and all the remaining items
|
229
310
|
for(t=0; t<this.list.length; t++) {
|
230
311
|
if(hasRefreshed || !this.children[t] || this.children[t].parseTreeNode.itemTitle !== this.list[t]) {
|
@@ -232,6 +313,9 @@ ListWidget.prototype.handleListChanges = function(changedTiddlers) {
|
|
232
313
|
this.removeListItem(t);
|
233
314
|
}
|
234
315
|
this.insertListItem(t,this.list[t]);
|
316
|
+
if(!hasRefreshed && t === oldLength) {
|
317
|
+
mustRefreshOldLast = true;
|
318
|
+
}
|
235
319
|
hasRefreshed = true;
|
236
320
|
} else {
|
237
321
|
// Refresh the item we're reusing
|
@@ -239,6 +323,12 @@ ListWidget.prototype.handleListChanges = function(changedTiddlers) {
|
|
239
323
|
hasRefreshed = hasRefreshed || refreshed;
|
240
324
|
}
|
241
325
|
}
|
326
|
+
// If items were inserted then we must recreate the item that used to be at the last position as it is no longer last
|
327
|
+
if(mustRefreshOldLast && oldLength > 0) {
|
328
|
+
var oldLastIdx = oldLength-1;
|
329
|
+
this.removeListItem(oldLastIdx);
|
330
|
+
this.insertListItem(oldLastIdx,this.list[oldLastIdx]);
|
331
|
+
}
|
242
332
|
// If there are items to remove and we have not refreshed then recreate the item that will now be at the last position
|
243
333
|
if(!hasRefreshed && this.children.length > this.list.length) {
|
244
334
|
this.removeListItem(this.list.length-1);
|
@@ -246,10 +336,29 @@ ListWidget.prototype.handleListChanges = function(changedTiddlers) {
|
|
246
336
|
}
|
247
337
|
} else {
|
248
338
|
// Cycle through the list, inserting and removing list items as needed
|
339
|
+
var mustRecreateLastItem = false;
|
340
|
+
if(this.join && this.join.length) {
|
341
|
+
if(this.children.length !== this.list.length) {
|
342
|
+
mustRecreateLastItem = true;
|
343
|
+
} else if(prevList[prevList.length-1] !== this.list[this.list.length-1]) {
|
344
|
+
mustRecreateLastItem = true;
|
345
|
+
}
|
346
|
+
}
|
347
|
+
var isLast = false, wasLast = false;
|
249
348
|
for(t=0; t<this.list.length; t++) {
|
349
|
+
isLast = t === this.list.length-1;
|
250
350
|
var index = this.findListItem(t,this.list[t]);
|
351
|
+
wasLast = index === this.children.length-1;
|
352
|
+
if(wasLast && (index !== t || this.children.length !== this.list.length)) {
|
353
|
+
mustRecreateLastItem = !!(this.join && this.join.length);
|
354
|
+
}
|
251
355
|
if(index === undefined) {
|
252
356
|
// The list item must be inserted
|
357
|
+
if(isLast && mustRecreateLastItem && t>0) {
|
358
|
+
// First re-create previosly-last item that will no longer be last
|
359
|
+
this.removeListItem(t-1);
|
360
|
+
this.insertListItem(t-1,this.list[t-1]);
|
361
|
+
}
|
253
362
|
this.insertListItem(t,this.list[t]);
|
254
363
|
hasRefreshed = true;
|
255
364
|
} else {
|
@@ -258,9 +367,15 @@ ListWidget.prototype.handleListChanges = function(changedTiddlers) {
|
|
258
367
|
this.removeListItem(n);
|
259
368
|
hasRefreshed = true;
|
260
369
|
}
|
261
|
-
// Refresh the item we're reusing
|
262
|
-
|
263
|
-
|
370
|
+
// Refresh the item we're reusing, or recreate if necessary
|
371
|
+
if(mustRecreateLastItem && (isLast || wasLast)) {
|
372
|
+
this.removeListItem(t);
|
373
|
+
this.insertListItem(t,this.list[t]);
|
374
|
+
hasRefreshed = true;
|
375
|
+
} else {
|
376
|
+
var refreshed = this.children[t].refresh(changedTiddlers);
|
377
|
+
hasRefreshed = hasRefreshed || refreshed;
|
378
|
+
}
|
264
379
|
}
|
265
380
|
}
|
266
381
|
}
|
@@ -350,8 +465,17 @@ ListItemWidget.prototype.execute = function() {
|
|
350
465
|
this.setVariable(this.parseTreeNode.counterName + "-first",this.parseTreeNode.isFirst ? "yes" : "no");
|
351
466
|
this.setVariable(this.parseTreeNode.counterName + "-last",this.parseTreeNode.isLast ? "yes" : "no");
|
352
467
|
}
|
468
|
+
// Add join if needed
|
469
|
+
var children = this.parseTreeNode.children,
|
470
|
+
join = this.parseTreeNode.join;
|
471
|
+
if(join && join.length && !this.parseTreeNode.isLast) {
|
472
|
+
children = children.slice(0);
|
473
|
+
$tw.utils.each(join,function(joinNode) {
|
474
|
+
children.push(joinNode);
|
475
|
+
})
|
476
|
+
}
|
353
477
|
// Construct the child widgets
|
354
|
-
this.makeChildWidgets();
|
478
|
+
this.makeChildWidgets(children);
|
355
479
|
};
|
356
480
|
|
357
481
|
/*
|
@@ -363,4 +487,37 @@ ListItemWidget.prototype.refresh = function(changedTiddlers) {
|
|
363
487
|
|
364
488
|
exports.listitem = ListItemWidget;
|
365
489
|
|
490
|
+
/*
|
491
|
+
Make <$list-template> and <$list-empty> widgets that do nothing
|
492
|
+
*/
|
493
|
+
var ListTemplateWidget = function(parseTreeNode,options) {
|
494
|
+
// Main initialisation inherited from widget.js
|
495
|
+
this.initialise(parseTreeNode,options);
|
496
|
+
};
|
497
|
+
ListTemplateWidget.prototype = new Widget();
|
498
|
+
ListTemplateWidget.prototype.render = function() {}
|
499
|
+
ListTemplateWidget.prototype.refresh = function() { return false; }
|
500
|
+
|
501
|
+
exports["list-template"] = ListTemplateWidget;
|
502
|
+
|
503
|
+
var ListEmptyWidget = function(parseTreeNode,options) {
|
504
|
+
// Main initialisation inherited from widget.js
|
505
|
+
this.initialise(parseTreeNode,options);
|
506
|
+
};
|
507
|
+
ListEmptyWidget.prototype = new Widget();
|
508
|
+
ListEmptyWidget.prototype.render = function() {}
|
509
|
+
ListEmptyWidget.prototype.refresh = function() { return false; }
|
510
|
+
|
511
|
+
exports["list-empty"] = ListEmptyWidget;
|
512
|
+
|
513
|
+
var ListJoinWidget = function(parseTreeNode,options) {
|
514
|
+
// Main initialisation inherited from widget.js
|
515
|
+
this.initialise(parseTreeNode,options);
|
516
|
+
};
|
517
|
+
ListJoinWidget.prototype = new Widget();
|
518
|
+
ListJoinWidget.prototype.render = function() {}
|
519
|
+
ListJoinWidget.prototype.refresh = function() { return false; }
|
520
|
+
|
521
|
+
exports["list-join"] = ListJoinWidget;
|
522
|
+
|
366
523
|
})();
|