From 220156edeed101ccda0fc16303234765a83d64ac Mon Sep 17 00:00:00 2001 From: Jdigio0213 <106447741+Jdigio0213@users.noreply.github.com> Date: Fri, 30 Aug 2024 03:31:36 -0500 Subject: [PATCH 01/82] Signing CLA (#8565) --- licenses/cla-individual.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/licenses/cla-individual.md b/licenses/cla-individual.md index c05d5906f..a77287f1d 100644 --- a/licenses/cla-individual.md +++ b/licenses/cla-individual.md @@ -585,3 +585,5 @@ Michael McDermott, @michaeljmcd, 2024-07-09 @webplusai, 2024/07/23 Val Packett, @valpackett, 2024/07/26 + +@JDIGIO0213, 2024/08/29 \ No newline at end of file From 5094096a87b6ee1f3fcaba31e5f1bf0290854891 Mon Sep 17 00:00:00 2001 From: btheado Date: Fri, 30 Aug 2024 09:21:24 -0400 Subject: [PATCH 02/82] Add import field to testcase tiddlers (#8499) * Convert "import" field of testcase tiddlers into $data widget with $filter attribute * Add documentation for testcase tiddler import field and fixed typo and grammar --- core/ui/TestCaseTemplate.tid | 1 + editions/tw5.com/tiddlers/concepts/TestCaseTiddlers.tid | 7 ++++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/core/ui/TestCaseTemplate.tid b/core/ui/TestCaseTemplate.tid index 8761abdd5..d6fccb956 100644 --- a/core/ui/TestCaseTemplate.tid +++ b/core/ui/TestCaseTemplate.tid @@ -13,6 +13,7 @@ title: $:/core/ui/TestCaseTemplate testActions="Actions" testHideIfPass=<> > + <$data $filter={{!!import}}/> <$data $compound-filter={{!!import-compound}}/> <$data $compound-tiddler=<>/> <%if [{!!description}!is[blank]] %><$data title="Description" text={{!!description}}/><%endif%> diff --git a/editions/tw5.com/tiddlers/concepts/TestCaseTiddlers.tid b/editions/tw5.com/tiddlers/concepts/TestCaseTiddlers.tid index fae4bab55..4d30dc75b 100644 --- a/editions/tw5.com/tiddlers/concepts/TestCaseTiddlers.tid +++ b/editions/tw5.com/tiddlers/concepts/TestCaseTiddlers.tid @@ -1,5 +1,5 @@ created: 20240507221902644 -modified: 20240729083054531 +modified: 20240808020847667 tags: Concepts title: TestCaseTiddlers type: text/vnd.tiddlywiki @@ -14,8 +14,9 @@ Test case tiddlers have the following ''fields'': |<<.field type>> |Needs to be set to `text/vnd.tiddlywiki-multiple` | |<<.field tags>> |Test cases are tagged [[$:/tags/wiki-test-spec]]. Test cases that intentionally fail are tagged [[$:/tags/wiki-test-spec-failing]] | |<<.field description>> |Descriptive heading for the test, intended to make it easy to identify the test | -|<<.field display-format>> |Optional, defaults to `wikitext`. Set to `plaintext` to cause the output to be rended as plain text | -|<<.field import-compound>> |<<.from-version "5.3.6">> A filter string, that defines a list of compound tiddlers, that should be imported. See: <<.wlink DataWidget>> widget | +|<<.field display-format>> |Optional, defaults to `wikitext`. Set to `plaintext` to cause the output to be rendered as plain text | +|<<.field import>> |<<.from-version "5.3.6">> A filter string that defines a list of tiddlers to import | +|<<.field import-compound>> |<<.from-version "5.3.6">> A filter string that defines a list of compound tiddlers to import. See: <<.wlink DataWidget>> widget | Test case tiddlers with the appropriate tag are shown in the $:/ControlPanel ''-> Advanced -> Test Cases '' From 9a4aafdb41de0bea952cfe354bfc50b9a6f45013 Mon Sep 17 00:00:00 2001 From: btheado Date: Fri, 30 Aug 2024 09:21:46 -0400 Subject: [PATCH 03/82] Prevent geospatial plugin exception when geomap contains empty geolayer widget (#8484) * Prevent exception when geomap contains empty geolayer widget * Convert testcase widget into testcase tiddler --- .../tests/widgets/geomap-empty-layer.tid | 19 +++++++++++++++++++ .../tiddlywiki/geospatial/widgets/geomap.js | 10 ++++++---- 2 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 plugins/tiddlywiki/geospatial/tests/widgets/geomap-empty-layer.tid diff --git a/plugins/tiddlywiki/geospatial/tests/widgets/geomap-empty-layer.tid b/plugins/tiddlywiki/geospatial/tests/widgets/geomap-empty-layer.tid new file mode 100644 index 000000000..1a8cdb686 --- /dev/null +++ b/plugins/tiddlywiki/geospatial/tests/widgets/geomap-empty-layer.tid @@ -0,0 +1,19 @@ +title: $:/plugins/tiddlywiki/geospatial/tests/widgets/geomap-empty-layer +description: Map using geolayer without json and lat/long attributes +import: $:/plugins/tiddlywiki/geospatial +type: text/vnd.tiddlywiki-multiple +tags: [[$:/tags/wiki-test-spec]] + +title: Narrative + +Verify exception reported in [[8452|https://github.com/TiddlyWiki/TiddlyWiki5/issues/8452]] is not thrown when the geolayer widget has no attributes ++ +title: Output + +<$geomap startPosition="bounds"> +<$geolayer/> + ++ +title: ExpectedResult + +

\ No newline at end of file diff --git a/plugins/tiddlywiki/geospatial/widgets/geomap.js b/plugins/tiddlywiki/geospatial/widgets/geomap.js index 9d9dfccd6..ba2957db2 100644 --- a/plugins/tiddlywiki/geospatial/widgets/geomap.js +++ b/plugins/tiddlywiki/geospatial/widgets/geomap.js @@ -262,10 +262,12 @@ GeomapWidget.prototype.refreshMap = function() { var bounds = null; $tw.utils.each(this.renderedLayers,function(layer) { var featureBounds = layer.layer.getBounds(); - if(bounds) { - bounds.extend(featureBounds); - } else { - bounds = featureBounds; + if(featureBounds.isValid()) { + if(bounds) { + bounds.extend(featureBounds); + } else { + bounds = featureBounds; + } } }); if(bounds) { From 26acd9be72600b7851e4c6fd5982619997000a3a Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Fri, 30 Aug 2024 14:55:14 +0100 Subject: [PATCH 04/82] Fix whitespace in social media cards Apologies @simonbaird this is the belated fix to the issue you mentioned in https://github.com/TiddlyWiki/TiddlyWiki5/pull/8441#issuecomment-2276175490 --- core/templates/social-metadata.tid | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/templates/social-metadata.tid b/core/templates/social-metadata.tid index f742621e8..eb89418bb 100644 --- a/core/templates/social-metadata.tid +++ b/core/templates/social-metadata.tid @@ -4,7 +4,7 @@ tags: $:/tags/RawMarkupWikified \procedure meta-plain(name,source,name-attribute:"name") \whitespace trim <%if [has[text]] %> - <meta <$text text=<>/>="<$text text=<>/>" content="<$text text={{{ [get[text]encodehtml[]] }}}/>"> + <meta <$text text=<>/>="<$text text=<>/>" content="<$text text={{{ [get[text]encodehtml[]] }}}/>"> <$text text={{{ [charcode[10]] }}}/> <%endif%> \end meta-plain @@ -13,7 +13,7 @@ tags: $:/tags/RawMarkupWikified \whitespace trim <%if [has[text]] %> <$wikify name="html" text={{{ [get[text]] }}} output="text"> - <meta <$text text=<>/>="<$text text=<>/>" content="<$text text={{{ [encodehtml[]] }}}/>"> + <meta <$text text=<>/>="<$text text=<>/>" content="<$text text={{{ [encodehtml[]] }}}/>"> <$text text={{{ [charcode[10]] }}}/> <%endif%> From 16e7510c7268aef00293e138403aede3b8b52bae Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Sun, 1 Sep 2024 16:34:44 +0100 Subject: [PATCH 05/82] Update release note --- .../prerelease/tiddlers/Release 5.3.6.tid | 61 ++++++++++++++++--- 1 file changed, 54 insertions(+), 7 deletions(-) diff --git a/editions/prerelease/tiddlers/Release 5.3.6.tid b/editions/prerelease/tiddlers/Release 5.3.6.tid index b18d56483..d7afb6c5e 100644 --- a/editions/prerelease/tiddlers/Release 5.3.6.tid +++ b/editions/prerelease/tiddlers/Release 5.3.6.tid @@ -1,6 +1,6 @@ caption: 5.3.6 -created: 20240710120027897 -modified: 20240710120027897 +created: 20240830144941926 +modified: 20240830144941926 tags: ReleaseNotes title: Release 5.3.6 type: text/vnd.tiddlywiki @@ -12,20 +12,38 @@ description: Under development ! Translation improvements +<<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8531">> support for new language "Chinese (Hong Kong)" + This release includes improvements to the following translations: -* +* Chinese ! Plugin Improvements !! Geospatial Plugin * <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8404">> support for custom wikitext popups to be attached to map features +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8437">> ordering of latitude and longitude in geospatial operators +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8484">> crash when geomap contains an empty geolayer widget !! Markdown Plugin * <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8395">> strikethrough, superscript and subscript editor toolbar buttons * <<.link-badge-improved "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8402">> readability of Markdown links to other tiddlers +* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8459">> image toolbar dropdown to editor toolbar +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8492">> colour for target footnote background + +! TestCaseWidget and Related Improvements + +This release includes several fixes and improvements to the TestCaseWidget, its default template, and the related DataWidget: + +* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8447">> new `$compound-filter` attribute for the DataWidget that allows other compound tiddlers to be imported. There is also a companion ''import-compound'' field for the TestCaseWidget template +* <<.link-badge-improved "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8514">> the TestCaseWidget default template to make it more modular +* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8499">> support for an `import` field in the default TestCaseWidget template, allowing additional tiddlers to be imported +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8416">> [[TestCaseWidget]] default template to allow wikitext within the test case narrative +* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8449">> WikiText formatting buttons when editing CompoundTiddlers +* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8450">> CompoundTiddlers type `text/vnd.tiddlywiki-multiple` to the editor type dropdown +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8409">> filesystem handling so that [[Compound Tiddlers]] are saved as .tid files ! Widget Improvements @@ -37,11 +55,21 @@ This release includes improvements to the following translations: ! Usability Improvements +* <<.link-badge-improved "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8530">> language descriptions by localising them * <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8407">> the contrast of plugin stability badges on hover +* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8430">> a "copy to clipboard" button to the view template body template used for code tiddlers +* <<.link-badge-added "github.com/TiddlyWiki/TiddlyWiki5/pull/8441">> support for social media cards to be added to TiddlyWiki +* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8518">> type attribute to input fields in control panel, allowing virtual keyboards to switch to the proper one when editing settings +* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8558">> empty message to tag picker, search dropdown and advanced search ! Hackability Improvements -* +* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8431">> support for the HTML entity `⁠` which can be useful for joining HTML elements without an unwanted linebreak +* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8439">> a keyboard shortcut for opening the control panel (by default it is ctrl-alt-C) +* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8182">> new [[Hidden Setting: Tag Pill Drag Filter]] that allows configuration of the tiddlers that are transferred when dragging a tag pill +* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8384">> tests to ensure that the syntax elements `{% %}` and `{= =}` are reserved for external tooling, and will never be recognised by TiddlyWiki itself +* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8462">> new cascades for the view template subtitle and tags +* <<.link-badge-improved "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8500">> excision tool implementation to make the excision tiddler title translatable ! Bug Fixes @@ -49,28 +77,47 @@ This release includes improvements to the following translations: * <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8393">> crash when [[WidgetMessage: tm-copy-to-clipboard]] is passed an empty string * <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8399">> disengage "select all" when cancelling an import * <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8382">> [[transcludes Operator]] and [[backtranscludes Operator]] minor issue with transclusions made via a filtered attribute -* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8416">> [[TestCaseWidget]] default template to allow wikitext within the test case narrative +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/discussions/8428">> scroll top position when animation duration is zero +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8476">> importing $:/build tiddler when upgrading to avoid overwriting it +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/commit/d9ac4a823fe0f91c615ed33fa890069f88cc8ab9">> crash with RenderCommand when filename filter returns empty result +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8355">> display of language plugins +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8540">> (and <<.link-badge-here "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8546">>) display of non-square plugin icons +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8517">> appearance of input elements other than type `text` and `search` +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/commit/38081b86c97a795420515156fcd52177574be516">> crash with filesystem adaptor if the wiki folder is missing +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8413">> unwrapped oveflowed code blocks not showing scroll bars when setting "Wrap long lines in code blocks" to "No" in "Theme tweaks" +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/7317">> (and <<.link-badge-here "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8552">>) search input box outline in Chrome-like browsers +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/commit/fa423e508ff5012423a1904bb17c9d61848732ee">> interpretation of success codes in Put saver OPTIONS request +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8485">> duplicated search result in advanced search if more than one tiddler is tagged with $:/tags/SearchResults +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/commit/7dfdbae812306875bac2445ca4ee505b406e3be1">> crash with KeyboardWidget in startup actions ! Node.js Improvements -* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8409">> filesystem handling so that [[Compound Tiddlers]] are saved as .tid files +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8339">> server crash when authenticating if newlines are contained in the site title ! Developer Improvements -* +* <<.link-badge-improved "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8423">> the browser checks used in $:/boot/bootprefix.js +* <<.link-badge-extended "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8494">> parse tree format to add `start`/`end` properties to table row and cell elements +* <<.link-badge-improved "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8265">> and simplified plugin library edition usage ! Acknowledgements [[@Jermolene|https://github.com/Jermolene]] would like to thank the contributors to this release who have generously given their time to help improve TiddlyWiki: <<.contributors """ +BramChen btheado flibbles +hoelzro kookma Leilei332 +linonetwo pmario +PotOfCoffee2Go saqimtiaz simonbaird springerspandrel +twMat +valpackett webplusai """>> From 81405ee8f48e956a5b3a8363a6518a20d924b7ad Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Sun, 1 Sep 2024 16:57:20 +0100 Subject: [PATCH 06/82] Further tweaks to release note --- editions/prerelease/tiddlers/Release 5.3.6.tid | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/editions/prerelease/tiddlers/Release 5.3.6.tid b/editions/prerelease/tiddlers/Release 5.3.6.tid index d7afb6c5e..d90d196be 100644 --- a/editions/prerelease/tiddlers/Release 5.3.6.tid +++ b/editions/prerelease/tiddlers/Release 5.3.6.tid @@ -35,15 +35,15 @@ This release includes improvements to the following translations: ! TestCaseWidget and Related Improvements -This release includes several fixes and improvements to the TestCaseWidget, its default template, and the related DataWidget: +This release includes several fixes and improvements to the TestCaseWidget, its default template, and the related DataWidget and CompoundTiddlers format: * <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8447">> new `$compound-filter` attribute for the DataWidget that allows other compound tiddlers to be imported. There is also a companion ''import-compound'' field for the TestCaseWidget template * <<.link-badge-improved "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8514">> the TestCaseWidget default template to make it more modular -* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8499">> support for an `import` field in the default TestCaseWidget template, allowing additional tiddlers to be imported +* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8499">> support for an ''import'' field in the default TestCaseWidget template, allowing additional tiddlers to be imported * <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8416">> [[TestCaseWidget]] default template to allow wikitext within the test case narrative * <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8449">> WikiText formatting buttons when editing CompoundTiddlers * <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8450">> CompoundTiddlers type `text/vnd.tiddlywiki-multiple` to the editor type dropdown -* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8409">> filesystem handling so that [[Compound Tiddlers]] are saved as .tid files +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8409">> filesystem handling so that CompoundTiddlers are saved as .tid files ! Widget Improvements From d70b23e439d5d1754d69e29436e8f4124a10b70c Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Sun, 1 Sep 2024 17:08:08 +0100 Subject: [PATCH 07/82] Add link to Jeremy's QCon talk --- editions/tw5.com/tiddlers/definitions/JeremyRuston.tid | 1 + 1 file changed, 1 insertion(+) diff --git a/editions/tw5.com/tiddlers/definitions/JeremyRuston.tid b/editions/tw5.com/tiddlers/definitions/JeremyRuston.tid index bf139ea1e..a63f3df68 100644 --- a/editions/tw5.com/tiddlers/definitions/JeremyRuston.tid +++ b/editions/tw5.com/tiddlers/definitions/JeremyRuston.tid @@ -15,6 +15,7 @@ I'm the original inventor of TiddlyWiki. You can hire me through [[Intertwingled Further information: +* A recording of the [[keynote I gave at QCon London in April 2024|https://www.infoq.com/presentations/bbc-micro/]], and the [[discussion on talk.tiddlywiki.org|https://talk.tiddlywiki.org/t/recording-of-jeremys-keynote-at-qcon-london-april-2024/10505]]. The talk mixes some nostalgia about my teenage activities with the BBC Micro with thoughts on the development of the software industry and insights gained from working with TiddlyWiki * An [[interview with me in The Inquirer|http://www.theinquirer.net/inquirer/feature/2105529/bt-software-engineer-tells-telco-source]] by Wendy Grossman * A [[hilarious interview with me|https://www.youtube.com/watch?v=auyIhw8MTmQ]] from British television in 1983 * Here's a video of a presentation I did in 2007 called [["How to Start an Open Source Project"|http://vimeo.com/856110]]. From 6b4f0bea98251e95f1783d14994aa867e6ba7c81 Mon Sep 17 00:00:00 2001 From: Mario Pietsch Date: Sun, 1 Sep 2024 18:18:42 +0200 Subject: [PATCH 08/82] Update: Simple tm-http-request POST (#8580) --- .../messages/WidgetMessage_ tm-http-request Examples.tid | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-http-request Examples.tid b/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-http-request Examples.tid index 53ea600ca..3df6bd6a9 100644 --- a/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-http-request Examples.tid +++ b/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-http-request Examples.tid @@ -1,5 +1,5 @@ created: 20240609152203076 -modified: 20240614210714914 +modified: 20240901142049810 tags: title: WidgetMessage: tm-http-request Examples type: text/vnd.tiddlywiki @@ -32,6 +32,7 @@ type: text/vnd.tiddlywiki <$action-sendmessage $message="tm-http-request" url="https://httpbin.org/post" + header-content-type="application/json" method="POST" body='{"foo": "bar"}' oncompletion=<> From 8e1cad5a59b1bb85c022de2bfa3a159bdb06e11d Mon Sep 17 00:00:00 2001 From: Mario Pietsch Date: Sun, 1 Sep 2024 18:48:59 +0200 Subject: [PATCH 09/82] Fix HTML nesting error causing typing problem in advanced search filter tab in Firefox (#8577) --- core/ui/AdvancedSearch/Filter.tid | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/core/ui/AdvancedSearch/Filter.tid b/core/ui/AdvancedSearch/Filter.tid index 5b82f9b32..35bbd1901 100644 --- a/core/ui/AdvancedSearch/Filter.tid +++ b/core/ui/AdvancedSearch/Filter.tid @@ -63,15 +63,13 @@ caption: {{$:/language/Search/Filter/Caption}} <$list filter="[all[shadows+tiddlers]tag[$:/tags/AdvancedSearch/FilterButton]!has[draft.of]]"><$transclude/> -<$reveal state="$:/temp/advancedsearch" type="nomatch" text=""> +<$reveal state="$:/temp/advancedsearch" type="nomatch" text="" tag="div" class="tc-search-results"> <$set name="resultCount" value="<$count filter={{$:/temp/advancedsearch}}/>"> -

<>

<$list filter={{$:/temp/advancedsearch}}> addsuffix[-primaryList]] -[[$:/temp/advancedsearch/selected-item]get[text]] +[then[]else[tc-list-item-selected]] }}}> <$transclude tiddler="$:/core/ui/ListItemTemplate"/> -
From f6cd7608f5eee8b0b886fa1a3ace1edef5b6fd95 Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Sun, 1 Sep 2024 17:54:14 +0100 Subject: [PATCH 10/82] Release note clarification --- editions/prerelease/tiddlers/Release 5.3.6.tid | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/editions/prerelease/tiddlers/Release 5.3.6.tid b/editions/prerelease/tiddlers/Release 5.3.6.tid index d90d196be..211b360cb 100644 --- a/editions/prerelease/tiddlers/Release 5.3.6.tid +++ b/editions/prerelease/tiddlers/Release 5.3.6.tid @@ -35,7 +35,7 @@ This release includes improvements to the following translations: ! TestCaseWidget and Related Improvements -This release includes several fixes and improvements to the TestCaseWidget, its default template, and the related DataWidget and CompoundTiddlers format: +This release includes several fixes and improvements to the TestCaseWidget, its default template, and the related DataWidget and CompoundTiddlers format. These features were first introduced in [[Release 5.3.4]] and are undergoing continuous improvement as we work on integrating them more widely across the system. * <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8447">> new `$compound-filter` attribute for the DataWidget that allows other compound tiddlers to be imported. There is also a companion ''import-compound'' field for the TestCaseWidget template * <<.link-badge-improved "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8514">> the TestCaseWidget default template to make it more modular From 842605d28e78a298ca9feae52c586da831f1a001 Mon Sep 17 00:00:00 2001 From: Mario Pietsch Date: Sun, 1 Sep 2024 19:53:37 +0200 Subject: [PATCH 11/82] fix advanced search filter input eats key presses (#8578) --- core/ui/AdvancedSearch/Filter.tid | 103 +++++++++++++++++------------- 1 file changed, 60 insertions(+), 43 deletions(-) diff --git a/core/ui/AdvancedSearch/Filter.tid b/core/ui/AdvancedSearch/Filter.tid index 35bbd1901..a8baf9d30 100644 --- a/core/ui/AdvancedSearch/Filter.tid +++ b/core/ui/AdvancedSearch/Filter.tid @@ -9,14 +9,16 @@ caption: {{$:/language/Search/Filter/Caption}} tag="$:/tags/AdvancedSearch" beforeafter="$beforeafter$" defaultState="$:/core/ui/AdvancedSearch/System" - actions="<$action-setfield $tiddler='$:/state/advancedsearch/currentTab' text=<>/>"/> + actions="<$action-setfield $tiddler='$:/state/advancedsearch/currentTab' text=<>/>" +/> \end \define cancel-search-actions() \whitespace trim -<$list - filter="[{$:/temp/advancedsearch/input}!match{$:/temp/advancedsearch}]" - emptyMessage="<$action-deletetiddler $filter='[[$:/temp/advancedsearch]] [[$:/temp/advancedsearch/input]] [[$:/temp/advancedsearch/selected-item]]' />"> +<$list filter="[{$:/temp/advancedsearch/input}!match{$:/temp/advancedsearch}]"> + <$list-empty> + <$action-deletetiddler $filter="[[$:/temp/advancedsearch]] [[$:/temp/advancedsearch/input]] [[$:/temp/advancedsearch/selected-item]]"/> + <$action-setfield $tiddler="$:/temp/advancedsearch/input" text={{$:/temp/advancedsearch}}/> <$action-setfield $tiddler="$:/temp/advancedsearch/refresh" text="yes"/> @@ -24,52 +26,67 @@ caption: {{$:/language/Search/Filter/Caption}} \define input-accept-actions() \whitespace trim -<$list - filter="[{$:/config/Search/NavigateOnEnter/enable}match[yes]]" - emptyMessage="<$list filter='[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]'><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/>"> +<$list filter="[{$:/config/Search/NavigateOnEnter/enable}match[yes]]"> + <$list-empty> + <$list filter="[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]"> + <$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/> + + <$/list-empty> <$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/> \end \define input-accept-variant-actions() \whitespace trim -<$list - filter="[{$:/config/Search/NavigateOnEnter/enable}match[yes]]" - emptyMessage="<$list filter='[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]'><$list filter='[<__tiddler__>get[text]minlength[1]]'><$action-sendmessage $message='tm-edit-tiddler' $param={{{ [<__tiddler__>get[text]] }}}/>"> +<$list filter="[{$:/config/Search/NavigateOnEnter/enable}match[yes]]"> + <$list-empty> + <$list filter="[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]"> + <$list filter="[<__tiddler__>get[text]minlength[1]]"> + <$action-sendmessage $message="tm-edit-tiddler" $param={{{ [<__tiddler__>get[text]] }}}/> + + + <$list filter="[<__tiddler__>get[text]minlength[1]]"> <$action-sendmessage $message="tm-edit-tiddler" $param={{{ [<__tiddler__>get[text]] }}}/> - -\end -\whitespace trim -<> - -<$reveal state="$:/temp/advancedsearch" type="nomatch" text="" tag="div" class="tc-search-results"> -<$set name="resultCount" value="<$count filter={{$:/temp/advancedsearch}}/>"> -

<>

-<$list filter={{$:/temp/advancedsearch}}> -addsuffix[-primaryList]] -[[$:/temp/advancedsearch/selected-item]get[text]] +[then[]else[tc-list-item-selected]] }}}> -<$transclude tiddler="$:/core/ui/ListItemTemplate"/> - + - +\end + +\whitespace trim + +<> + + + +<$reveal state="$:/temp/advancedsearch" type="nomatch" text="" tag="div" class="tc-search-results"> + <$set name="resultCount" value="<$count filter={{$:/temp/advancedsearch}}/>"> +

<>

+ <$list filter={{$:/temp/advancedsearch}}> + addsuffix[-primaryList]] -[[$:/temp/advancedsearch/selected-item]get[text]] +[then[]else[tc-list-item-selected]] }}}> + <$transclude tiddler="$:/core/ui/ListItemTemplate"/> + + + From a0be1d63efbfe83abdb36ee482f023e6d3ec0e32 Mon Sep 17 00:00:00 2001 From: Mario Pietsch Date: Mon, 2 Sep 2024 13:41:06 +0200 Subject: [PATCH 12/82] [DOCS] Using Stylesheets -- fix typos (#8581) --- editions/tw5.com/tiddlers/howtos/Using Stylesheets.tid | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/editions/tw5.com/tiddlers/howtos/Using Stylesheets.tid b/editions/tw5.com/tiddlers/howtos/Using Stylesheets.tid index 3d41d3f19..201c2b823 100644 --- a/editions/tw5.com/tiddlers/howtos/Using Stylesheets.tid +++ b/editions/tw5.com/tiddlers/howtos/Using Stylesheets.tid @@ -41,7 +41,7 @@ You can then use your own [[styles and classes in WikiText|Styles and Classes in Custom stylesheets are applied independently from theme stylesheets. Therefore, it is often necessary for the css rules in your custom stylesheet to be more specific than those of the theme you want to override. For example, `html body.tc-body` is more specific than `body.tc-body`. -<<.tip "''You should always start with the least specific value that works!''

">> +<<.tip """You should always start with the least specific value that works!""">> ! Stylesheet Types @@ -76,4 +76,4 @@ The ~TiddlyWiki core provides several [[global macros that are helpful in constr !! See Also -* <> +<> From dafe7884e8650cc0672b3c03914c323276a257a5 Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Mon, 2 Sep 2024 16:32:48 +0100 Subject: [PATCH 13/82] Add TiddlyPWA to GettingStarted Apologies @valpackett I had not realised that TiddlyPWA was not listed. I'd welcome any improvements to the listing. I copied the functional description from your website but might be a good opportunity to sell the benefits more. I'm doing this as part of a review and improvement of the GettingStarted tiddler. --- .../tiddlers/saving/Saving with TiddlyPWA.tid | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 editions/tw5.com/tiddlers/saving/Saving with TiddlyPWA.tid diff --git a/editions/tw5.com/tiddlers/saving/Saving with TiddlyPWA.tid b/editions/tw5.com/tiddlers/saving/Saving with TiddlyPWA.tid new file mode 100644 index 000000000..ab2ef2c2b --- /dev/null +++ b/editions/tw5.com/tiddlers/saving/Saving with TiddlyPWA.tid @@ -0,0 +1,15 @@ +caption: ~TiddlyPWA +color: #E056B4 +community-author: Val Packett +created: 20240902162617154 +delivery: Progressive Web Application +description: Save to browser storage +method: save +modified: 20240902162617154 +tags: Chrome Firefox [[Internet Explorer]] Linux Mac Opera Safari Saving Windows iOS Edge +title: TiddlyPWA - Save to AWS or Google Storage +type: text/vnd.tiddlywiki + +~TiddlyPWA turns TiddlyWiki 5 into an offline-first Progressive Web App with encrypted local persistent storage and efficient synchronization with a self-hosted server that can easily be hosted for free. + +https://tiddly.packett.cool/ From 487f5f5251c138067073ef8e1bb0a076f0d15c8c Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Mon, 2 Sep 2024 16:33:57 +0100 Subject: [PATCH 14/82] IIS example config shouldn't be tagged "Saving" --- .../saving/Example config-tiddlyweb-host for IIS.txt.meta | 2 +- .../tiddlers/saving/Example package.json for IIS.txt.meta | 2 +- .../tiddlers/saving/Example tiddlywiki.info for IIS.txt.meta | 2 +- .../tw5.com/tiddlers/saving/Example web.config for IIS.txt.meta | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/editions/tw5.com/tiddlers/saving/Example config-tiddlyweb-host for IIS.txt.meta b/editions/tw5.com/tiddlers/saving/Example config-tiddlyweb-host for IIS.txt.meta index 2e5142973..4c9dae0be 100644 --- a/editions/tw5.com/tiddlers/saving/Example config-tiddlyweb-host for IIS.txt.meta +++ b/editions/tw5.com/tiddlers/saving/Example config-tiddlyweb-host for IIS.txt.meta @@ -1,5 +1,5 @@ title: Example config-tiddlyweb-host for IIS created: 20180328145039530 modified: 20180328145234871 -tags: Saving +tags: [[Installing TiddlyWiki on Microsoft Internet Information Server]] type: text/plain diff --git a/editions/tw5.com/tiddlers/saving/Example package.json for IIS.txt.meta b/editions/tw5.com/tiddlers/saving/Example package.json for IIS.txt.meta index 4d673d6d0..e40a98526 100644 --- a/editions/tw5.com/tiddlers/saving/Example package.json for IIS.txt.meta +++ b/editions/tw5.com/tiddlers/saving/Example package.json for IIS.txt.meta @@ -1,5 +1,5 @@ created: 20180328145039530 modified: 20180328145234871 -tags: Saving +tags: [[Installing TiddlyWiki on Microsoft Internet Information Server]] title: Example package.json for IIS type: text/plain diff --git a/editions/tw5.com/tiddlers/saving/Example tiddlywiki.info for IIS.txt.meta b/editions/tw5.com/tiddlers/saving/Example tiddlywiki.info for IIS.txt.meta index 6fb2e36fc..dc5911c97 100644 --- a/editions/tw5.com/tiddlers/saving/Example tiddlywiki.info for IIS.txt.meta +++ b/editions/tw5.com/tiddlers/saving/Example tiddlywiki.info for IIS.txt.meta @@ -1,5 +1,5 @@ created: 20180328151124878 modified: 20180328151214616 -tags: Saving +tags: [[Installing TiddlyWiki on Microsoft Internet Information Server]] title: Example tiddlywiki.info for IIS type: text/plain diff --git a/editions/tw5.com/tiddlers/saving/Example web.config for IIS.txt.meta b/editions/tw5.com/tiddlers/saving/Example web.config for IIS.txt.meta index 749fdcc68..2c8870758 100644 --- a/editions/tw5.com/tiddlers/saving/Example web.config for IIS.txt.meta +++ b/editions/tw5.com/tiddlers/saving/Example web.config for IIS.txt.meta @@ -1,5 +1,5 @@ created: 20180328145259455 modified: 20180701185215523 -tags: Saving +tags: [[Installing TiddlyWiki on Microsoft Internet Information Server]] title: Example web.config for IIS type: text/plain From 2af23a6ca586ca07499245227dbb92dd61cfcdec Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Mon, 2 Sep 2024 16:34:11 +0100 Subject: [PATCH 15/82] Remove extraneous camelcase --- editions/tw5.com/tiddlers/saving/Saving on TidGi.tid | 2 +- editions/tw5.com/tiddlers/saving/Saving with FireFox.tid | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/editions/tw5.com/tiddlers/saving/Saving on TidGi.tid b/editions/tw5.com/tiddlers/saving/Saving on TidGi.tid index 8290254c6..26263ed69 100644 --- a/editions/tw5.com/tiddlers/saving/Saving on TidGi.tid +++ b/editions/tw5.com/tiddlers/saving/Saving on TidGi.tid @@ -1,4 +1,4 @@ -caption: TidGi Desktop +caption: ~TidGi Desktop color: #FF8A65 community-author: LinOnetwo created: 20220221080637764 diff --git a/editions/tw5.com/tiddlers/saving/Saving with FireFox.tid b/editions/tw5.com/tiddlers/saving/Saving with FireFox.tid index b64f695c4..2a3b3bd19 100644 --- a/editions/tw5.com/tiddlers/saving/Saving with FireFox.tid +++ b/editions/tw5.com/tiddlers/saving/Saving with FireFox.tid @@ -1,4 +1,4 @@ -caption: Saving with FireFox +caption: Saving with ~FireFox created: 20230803205140949 modified: 20230803213246739 tags: Saving Firefox From 69637640d2eb0cd062b18a453d27f45e0f748d4c Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Mon, 2 Sep 2024 16:51:15 +0100 Subject: [PATCH 16/82] Standardise whitespace in conditional shortcut syntax (#8583) --- .../parsers/wikiparser/rules/conditional.js | 4 +-- core/ui/AdvancedSearch/Shadows.tid | 6 ++-- core/ui/AdvancedSearch/System.tid | 6 ++-- core/wiki/macros/tag-picker.tid | 20 ++++++------ .../tests/data/conditionals/Basic.tid | 2 +- .../tests/data/conditionals/BlockMode.tid | 12 +++---- .../tiddlers/tests/data/conditionals/Else.tid | 2 +- .../tests/data/conditionals/Elseif.tid | 2 +- .../tests/data/conditionals/MissingEndIf.tid | 2 +- .../data/conditionals/MultipleResults.tid | 2 +- .../tests/data/conditionals/Nested.tid | 12 +++---- .../tests/data/conditionals/NestedElseif.tid | 16 +++++----- .../tiddlers/empty-tag-node-template.tid | 4 +-- .../tiddlers/releasenotes/Release 5.3.2.tid | 8 ++--- .../tw5.com/tiddlers/system/doc-macros.tid | 2 +- .../tiddlers/system/filter-run-template.tid | 8 ++--- .../tiddlers/system/operator-macros.tid | 4 +-- .../tiddlers/system/operator-template.tid | 8 ++--- .../tiddlers/system/version-macros.tid | 6 ++-- .../tiddlers/widgets/EditTextWidget.tid | 2 +- .../tw5.com/tiddlers/widgets/EditWidget.tid | 2 +- .../wikitext/Conditional Shortcut Syntax.tid | 32 +++++++++---------- .../tiddlywiki/github-fork-ribbon/usage.tid | 8 ++--- 23 files changed, 85 insertions(+), 85 deletions(-) diff --git a/core/modules/parsers/wikiparser/rules/conditional.js b/core/modules/parsers/wikiparser/rules/conditional.js index 23940fd88..c2d6a43b8 100644 --- a/core/modules/parsers/wikiparser/rules/conditional.js +++ b/core/modules/parsers/wikiparser/rules/conditional.js @@ -6,7 +6,7 @@ module-type: wikirule Conditional shortcut syntax ``` -This is a <% if [{something}] %>Elephant<% elseif [{else}] %>Pelican<% else %>Crocodile<% endif %> +This is a <%if [{something}] %>Elephant<%elseif [{else}] %>Pelican<%else%>Crocodile<%endif%> ``` \*/ @@ -27,7 +27,7 @@ exports.init = function(parser) { }; exports.findNextMatch = function(startPos) { - // Look for the next <% if shortcut + // Look for the next <%if shortcut this.matchRegExp.lastIndex = startPos; this.match = this.matchRegExp.exec(this.parser.source); // If not found then return no match diff --git a/core/ui/AdvancedSearch/Shadows.tid b/core/ui/AdvancedSearch/Shadows.tid index daa8e6c2c..043aee590 100644 --- a/core/ui/AdvancedSearch/Shadows.tid +++ b/core/ui/AdvancedSearch/Shadows.tid @@ -83,11 +83,11 @@ first-search-filter: [all[shadows]searchsort[title]limit[250]] -[[$:/
-<% if [match[0]] %> +<%if [match[0]] %> {{$:/language/Search/Matches/NoMatch}} -<% else %> +<%else%> <> -<% endif %> +<%endif%> <$list filter="[all[shadows]search{$:/temp/advancedsearch}sort[title]limit[250]] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]]"> addsuffix[-primaryList]] -[[$:/temp/advancedsearch/selected-item]get[text]] +[then[]else[tc-list-item-selected]] }}}> diff --git a/core/ui/AdvancedSearch/System.tid b/core/ui/AdvancedSearch/System.tid index ca9584ed7..5e1ec0254 100644 --- a/core/ui/AdvancedSearch/System.tid +++ b/core/ui/AdvancedSearch/System.tid @@ -82,11 +82,11 @@ first-search-filter: [is[system]searchsort[title]limit[250]] -[[$:/te
-<% if [match[0]] %> +<%if [match[0]] %> {{$:/language/Search/Matches/NoMatch}} -<% else %> +<%else%> <> -<% endif %> +<%endif%> <$list filter="[is[system]search{$:/temp/advancedsearch}sort[title]limit[250]] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]] -[[$:/temp/advancedsearch/selected-item]]"> addsuffix[-primaryList]] -[[$:/temp/advancedsearch/selected-item]get[text]] +[then[]else[tc-list-item-selected]] }}}> diff --git a/core/wiki/macros/tag-picker.tid b/core/wiki/macros/tag-picker.tid index 697ac777e..4186f4138 100644 --- a/core/wiki/macros/tag-picker.tid +++ b/core/wiki/macros/tag-picker.tid @@ -31,11 +31,11 @@ second-search-filter: [subfilteris[system]search:title \procedure add-tag-actions() <$let tag=<<_tf.getTag>> > <$action-listops $tiddler=<> $field=<> $subfilter='+[toggletrim[]]'/> - <% if [] :intersection[getenlist-input[]] %> + <%if [] :intersection[getenlist-input[]] %> - <% else %> + <%else%> <> - <% endif %> + <%endif%> <> <$action-setfield $tiddler=<> text="yes"/> @@ -46,11 +46,11 @@ second-search-filter: [subfilteris[system]search:title The second ESC tries to close the "draft tiddler" --> \procedure clear-tags-actions-inner() -<% if [has[text]] ~[has[text]] %> +<%if [has[text]] ~[has[text]] %> <> -<% else %> +<%else%> <> -<% endif %> +<%endif%> \end @@ -128,13 +128,13 @@ The second ESC tries to close the "draft tiddler" > {{$:/core/images/down-arrow}} - <% if [has[text]] %> + <%if [has[text]] %> <$button actions=<> class="tc-btn-invisible tc-small-gap tc-btn-dropdown" tooltip={{$:/language/EditTemplate/Tags/ClearInput/Hint}} aria-label={{$:/language/EditTemplate/Tags/ClearInput/Caption}} > {{$:/core/images/close-button}} - <% endif %> + <%endif%> <$let tag=<<_tf.getTag>>> <$button set=<> actions=<> > @@ -144,13 +144,13 @@ The second ESC tries to close the "draft tiddler"
- <% if [has[text]] %> + <%if [has[text]] %>
<$macrocall $name="tag-picker-listTags" filter=<> suffix="-primaryList" />
<$macrocall $name="tag-picker-listTags" filter=<> suffix="-secondaryList" />
- <% endif %> + <%endif%>
\end diff --git a/editions/test/tiddlers/tests/data/conditionals/Basic.tid b/editions/test/tiddlers/tests/data/conditionals/Basic.tid index ff2d2df4d..6e5046f56 100644 --- a/editions/test/tiddlers/tests/data/conditionals/Basic.tid +++ b/editions/test/tiddlers/tests/data/conditionals/Basic.tid @@ -5,7 +5,7 @@ tags: [[$:/tags/wiki-test-spec]] title: Text -This is a <% if [match[one]] %>Elephant<% endif %>, I think. +This is a <%if [match[one]] %>Elephant<%endif%>, I think. + title: Output diff --git a/editions/test/tiddlers/tests/data/conditionals/BlockMode.tid b/editions/test/tiddlers/tests/data/conditionals/BlockMode.tid index 45233baa4..c41b34563 100644 --- a/editions/test/tiddlers/tests/data/conditionals/BlockMode.tid +++ b/editions/test/tiddlers/tests/data/conditionals/BlockMode.tid @@ -6,23 +6,23 @@ tags: [[$:/tags/wiki-test-spec]] title: Output \procedure test(animal) -<% if [match[Elephant]] %> +<%if [match[Elephant]] %> ! It is an elephant -<% else %> +<%else%> -<% if [match[Giraffe]] %> +<%if [match[Giraffe]] %> ! It is a giraffe -<% else %> +<%else%> ! It is completely unknown -<% endif %> +<%endif%> -<% endif %> +<%endif%> \end diff --git a/editions/test/tiddlers/tests/data/conditionals/Else.tid b/editions/test/tiddlers/tests/data/conditionals/Else.tid index 7bc32b34e..ef42f198c 100644 --- a/editions/test/tiddlers/tests/data/conditionals/Else.tid +++ b/editions/test/tiddlers/tests/data/conditionals/Else.tid @@ -5,7 +5,7 @@ tags: [[$:/tags/wiki-test-spec]] title: Text -This is a <% if [match[one]] %>Elephant<% else %>Crocodile<% endif %>, I think. +This is a <%if [match[one]] %>Elephant<%else%>Crocodile<%endif%>, I think. + title: Output diff --git a/editions/test/tiddlers/tests/data/conditionals/Elseif.tid b/editions/test/tiddlers/tests/data/conditionals/Elseif.tid index d37f3380c..068ac31c9 100644 --- a/editions/test/tiddlers/tests/data/conditionals/Elseif.tid +++ b/editions/test/tiddlers/tests/data/conditionals/Elseif.tid @@ -5,7 +5,7 @@ tags: [[$:/tags/wiki-test-spec]] title: Text -This is a <% if [match[one]] %>Elephant<% elseif [match[two]] %>Antelope<% else %>Crocodile<% endif %>, I think. +This is a <%if [match[one]] %>Elephant<%elseif [match[two]] %>Antelope<%else%>Crocodile<%endif%>, I think. + title: Output diff --git a/editions/test/tiddlers/tests/data/conditionals/MissingEndIf.tid b/editions/test/tiddlers/tests/data/conditionals/MissingEndIf.tid index cacaf9869..ff01ca959 100644 --- a/editions/test/tiddlers/tests/data/conditionals/MissingEndIf.tid +++ b/editions/test/tiddlers/tests/data/conditionals/MissingEndIf.tid @@ -5,7 +5,7 @@ tags: [[$:/tags/wiki-test-spec]] title: Text -This is a <% if [match[one]] %>Elephant +This is a <%if [match[one]] %>Elephant + title: Output diff --git a/editions/test/tiddlers/tests/data/conditionals/MultipleResults.tid b/editions/test/tiddlers/tests/data/conditionals/MultipleResults.tid index baa966ed5..866c6d8f5 100644 --- a/editions/test/tiddlers/tests/data/conditionals/MultipleResults.tid +++ b/editions/test/tiddlers/tests/data/conditionals/MultipleResults.tid @@ -5,7 +5,7 @@ tags: [[$:/tags/wiki-test-spec]] title: Output -This is a <% if 1 2 3 4 5 6 %>Elephant<% endif %>, I think. +This is a <%if 1 2 3 4 5 6 %>Elephant<%endif%>, I think. + title: ExpectedResult diff --git a/editions/test/tiddlers/tests/data/conditionals/Nested.tid b/editions/test/tiddlers/tests/data/conditionals/Nested.tid index dffa791fc..e5ea9fc40 100644 --- a/editions/test/tiddlers/tests/data/conditionals/Nested.tid +++ b/editions/test/tiddlers/tests/data/conditionals/Nested.tid @@ -6,15 +6,15 @@ tags: [[$:/tags/wiki-test-spec]] title: Output \procedure test(animal) -<% if [match[Elephant]] %> +<%if [match[Elephant]] %> It is an elephant -<% else %> -<% if [match[Giraffe]] %> +<%else%> +<%if [match[Giraffe]] %> It is a giraffe -<% else %> +<%else%> It is completely unknown -<% endif %> -<% endif %> +<%endif%> +<%endif%> \end <> diff --git a/editions/test/tiddlers/tests/data/conditionals/NestedElseif.tid b/editions/test/tiddlers/tests/data/conditionals/NestedElseif.tid index 6fba8cac8..bfc3e085c 100644 --- a/editions/test/tiddlers/tests/data/conditionals/NestedElseif.tid +++ b/editions/test/tiddlers/tests/data/conditionals/NestedElseif.tid @@ -7,20 +7,20 @@ title: Text \whitespace trim This is a - <% if [match[one]] %> - <% if [match[one]] %> + <%if [match[one]] %> + <%if [match[one]] %> Indian - <% elseif [match[two]] %> + <%elseif [match[two]] %> African - <% else %> + <%else%> Unknown - <% endif %> + <%endif%> Elephant - <% elseif [match[two]] %> + <%elseif [match[two]] %> Antelope - <% else %> + <%else%> Crocodile - <% endif %> + <%endif%> , I think. + title: Output diff --git a/editions/tw5.com/tiddlers/empty-tag-node-template.tid b/editions/tw5.com/tiddlers/empty-tag-node-template.tid index 79905b77c..96c77e76b 100644 --- a/editions/tw5.com/tiddlers/empty-tag-node-template.tid +++ b/editions/tw5.com/tiddlers/empty-tag-node-template.tid @@ -5,8 +5,8 @@ tags: $:/tags/ViewTemplate title: $:/editions/tw5.com/empty-tag-node-template type: -<% if [!has[text]!has[tags]tagging[]] %> +<%if [!has[text]!has[tags]tagging[]] %> The following tiddlers are tagged with <>: <!has[text]!has[tags]tagging[]]" class:"multi-columns">> -<% endif %> \ No newline at end of file +<%endif%> \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.3.2.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.3.2.tid index d99d537c1..56f54cbb0 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.3.2.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.3.2.tid @@ -23,13 +23,13 @@ type: text/vnd.tiddlywiki These new token-based shortcuts allow a richer structure and expressivity than existing features such as widgets or pragmas. For example: ``` -<% if [match[Elephant]] %> +<%if [match[Elephant]] %> It is an elephant -<% elseif [match[Giraffe]] %> +<%elseif [match[Giraffe]] %> It is a giraffe -<% else %> +<%else%> It is completely unknown -<% endif %> +<%endif%> ``` Behind the scenes, the conditional shortcut syntax is rendered as the equivalent [[ListWidgets|ListWidget]]. diff --git a/editions/tw5.com/tiddlers/system/doc-macros.tid b/editions/tw5.com/tiddlers/system/doc-macros.tid index d0574fe5f..199479fb8 100644 --- a/editions/tw5.com/tiddlers/system/doc-macros.tid +++ b/editions/tw5.com/tiddlers/system/doc-macros.tid @@ -119,7 +119,7 @@ type: text/vnd.tiddlywiki \procedure .infoBox(text:"", title, icon:"$:/core/images/info-button", class, iconSize:"1.4rem") \function _f.tipClass() [[doc-icon-block]] [!is[blank]then] +[join[ ]]
>> - <%if [!is[blank]] %><div>''<<title>>''</div><% endif %> + <%if [<title>!is[blank]] %><div>''<<title>>''</div><%endif%> <div class="doc-block-icon"><$transclude $tiddler=<<icon>> size=<<iconSize>>/></div> <<text>> </div> diff --git a/editions/tw5.com/tiddlers/system/filter-run-template.tid b/editions/tw5.com/tiddlers/system/filter-run-template.tid index 73b4a2510..c559d8bdd 100644 --- a/editions/tw5.com/tiddlers/system/filter-run-template.tid +++ b/editions/tw5.com/tiddlers/system/filter-run-template.tid @@ -9,18 +9,18 @@ type: text/vnd.tiddlywiki \whitespace trim \procedure .op-place() -<% if [<op-name>!is[blank]] %> +<%if [<op-name>!is[blank]] %> <$macrocall $name=".place" _=<<op-name>> /><span class="tc-tiny-gap">=</span> -<% endif %> +<%endif%> \end \procedure .op-row() -<% if [<op-body>!is[blank]] %> +<%if [<op-body>!is[blank]] %> <tr> <th align="left"><<op-head>></th> <td><<.op-place>><<op-body>></td> </tr> -<% endif %> +<%endif%> \end <$list filter="[all[current]tag[Named Filter Run Prefix]]"> diff --git a/editions/tw5.com/tiddlers/system/operator-macros.tid b/editions/tw5.com/tiddlers/system/operator-macros.tid index 2b19d56db..e2dce9e2d 100644 --- a/editions/tw5.com/tiddlers/system/operator-macros.tid +++ b/editions/tw5.com/tiddlers/system/operator-macros.tid @@ -16,9 +16,9 @@ title: $:/editions/tw5.com/operator-macros <$list filter="[title<.state-prefix>addsuffix{!!title}addsuffix[/]addsuffix<n>]" variable=".state"> <$reveal state=<<.state>> type="nomatch" text="show"> <code><$text text=<<eg>>/></code> - <% if [<ie>!is[blank]] %> + <%if [<ie>!is[blank]] %> <dd>→ <<ie>></dd> - <% endif %> + <%endif%> <dl> <dd><$button actions=<<.operator-example-tryit-actions>>>Try it</$button></dd> </dl> diff --git a/editions/tw5.com/tiddlers/system/operator-template.tid b/editions/tw5.com/tiddlers/system/operator-template.tid index f4f3e08ef..47096f79c 100644 --- a/editions/tw5.com/tiddlers/system/operator-template.tid +++ b/editions/tw5.com/tiddlers/system/operator-template.tid @@ -8,17 +8,17 @@ title: $:/editions/tw5.com/operator-template \whitespace trim \procedure .op-place() -<% if [<op-name>!is[blank]] %> +<%if [<op-name>!is[blank]] %> <$macrocall $name=".place" _=<<op-name>> /><span class="tc-tiny-gap">=</span> -<% endif %> +<%endif%> \end \procedure .op-row() -<% if [<op-body>!is[blank]] %> +<%if [<op-body>!is[blank]] %> <tr> <th align="left"><<op-head>></th><td><<.op-place>><<op-body>></td> </tr> -<% endif %> +<%endif%> \end <$list filter="[all[current]tag[Filter Operators]]"> diff --git a/editions/tw5.com/tiddlers/system/version-macros.tid b/editions/tw5.com/tiddlers/system/version-macros.tid index c03f4237c..35e98cf71 100644 --- a/editions/tw5.com/tiddlers/system/version-macros.tid +++ b/editions/tw5.com/tiddlers/system/version-macros.tid @@ -19,11 +19,11 @@ type: text/vnd.tiddlywiki \end \procedure .from-version(version) -<% if [<version>compare:version:gteq<tf.from-version-reference>] %> +<%if [<version>compare:version:gteq<tf.from-version-reference>] %> <<.from-version-template "doc-from-version doc-from-version-new" "New in v">> -<% else %> +<%else%> <<.from-version-template "doc-from-version" "Introduced in v">> -<% endif %> +<%endif%> \end \procedure .deprecated-since(version, superseded:"") diff --git a/editions/tw5.com/tiddlers/widgets/EditTextWidget.tid b/editions/tw5.com/tiddlers/widgets/EditTextWidget.tid index dcfd088fb..609cf36ff 100644 --- a/editions/tw5.com/tiddlers/widgets/EditTextWidget.tid +++ b/editions/tw5.com/tiddlers/widgets/EditTextWidget.tid @@ -75,7 +75,7 @@ eg="""<$edit-text tiddler=<<currentTiddler>> field="heading" size="25" focus="ye eg="""\procedure onInput() <%if [get[temp]match[$:/]] %> <$action-confirm $message="Yes, this is how system tiddler names begin!"/> - <% endif %> + <%endif%> \end Type a new tiddler name, starting with the system prefix `$:/`: <$edit-text inputActions=<<onInput>> field="temp" class="tc-edit-texteditor"/> diff --git a/editions/tw5.com/tiddlers/widgets/EditWidget.tid b/editions/tw5.com/tiddlers/widgets/EditWidget.tid index 2b72aa8ec..6822d4d77 100644 --- a/editions/tw5.com/tiddlers/widgets/EditWidget.tid +++ b/editions/tw5.com/tiddlers/widgets/EditWidget.tid @@ -26,7 +26,7 @@ The content of the `<$edit>` widget is ignored. ! Examples -!! Edit the contents (text field) of a tiddler titled <%if [<now YYYY-0MM-0DD>is[tiddler]] %> <$tiddler tiddler=<<now YYYY-0MM-0DD>> > <$link/></$tiddler> <%else %> with today’s date <% endif %> +!! Edit the contents (text field) of a tiddler titled <%if [<now YYYY-0MM-0DD>is[tiddler]] %> <$tiddler tiddler=<<now YYYY-0MM-0DD>> > <$link/></$tiddler> <%else %> with today’s date <%endif%> <$macrocall $name=".example" n="1" eg="""<$edit tiddler=<<now YYYY-0MM-0DD>> class="tc-edit-texteditor"/> diff --git a/editions/tw5.com/tiddlers/wikitext/Conditional Shortcut Syntax.tid b/editions/tw5.com/tiddlers/wikitext/Conditional Shortcut Syntax.tid index 8cef3acfb..48ff59757 100644 --- a/editions/tw5.com/tiddlers/wikitext/Conditional Shortcut Syntax.tid +++ b/editions/tw5.com/tiddlers/wikitext/Conditional Shortcut Syntax.tid @@ -11,40 +11,40 @@ Within an "if" or "elseif" clause, the variable `condition` contains the value o A simple example: <$macrocall $name='wikitext-example-without-html' -src='<% if [{$:/info/url/protocol}match[file:]] %> +src='<%if [{$:/info/url/protocol}match[file:]] %> Loaded from a file URI -<% else %> +<%else%> Not loaded from a file URI -<% endif %> +<%endif%> '/> -One or more `<% elseif %>` clauses may be included before the `<% else %>` clause: +One or more `<%elseif%>` clauses may be included before the `<%else%>` clause: <$macrocall $name='wikitext-example-without-html' -src='<% if [{$:/info/url/protocol}match[file:]] %> +src='<%if [{$:/info/url/protocol}match[file:]] %> Loaded from a file URI -<% elseif [{$:/info/url/protocol}match[https:]] %> +<%elseif [{$:/info/url/protocol}match[https:]] %> Loaded from an HTTPS URI -<% elseif [{$:/info/url/protocol}match[http:]] %> +<%elseif [{$:/info/url/protocol}match[http:]] %> Loaded from an HTTP URI -<% else %> +<%else%> Loaded from an unknown protocol -<% endif %> +<%endif%> '/> The conditional shortcut syntax can be nested: <$macrocall $name='wikitext-example-without-html' src='\procedure test(animal) -<% if [<animal>match[Elephant]] %> +<%if [<animal>match[Elephant]] %> It is an elephant -<% else %> - <% if [<animal>match[Giraffe]] %> +<%else%> + <%if [<animal>match[Giraffe]] %> It is a giraffe - <% else %> + <%else%> It is completely unknown - <% endif %> -<% endif %> + <%endif%> +<%endif%> \end <<test "Giraffe">> @@ -56,7 +56,7 @@ src='\procedure test(animal) Notes: -* Clauses are parsed in inline mode by default. Force block mode parsing by following the opening `<% if %>`, `<% elseif %>` or `<% else %>` with two line breaks +* Clauses are parsed in inline mode by default. Force block mode parsing by following the opening `<%if %>`, `<%elseif%>` or `<%else%>` with two line breaks * Widgets and HTML elements must be within a single conditional clause; it is not possible to start an element in one conditional clause and end it in another * The conditional shortcut syntax cannot contain pragmas such as procedure definitions diff --git a/plugins/tiddlywiki/github-fork-ribbon/usage.tid b/plugins/tiddlywiki/github-fork-ribbon/usage.tid index 2c1388da0..c91566b69 100644 --- a/plugins/tiddlywiki/github-fork-ribbon/usage.tid +++ b/plugins/tiddlywiki/github-fork-ribbon/usage.tid @@ -6,11 +6,11 @@ title: $:/plugins/tiddlywiki/github-fork-ribbon/usage \end \procedure ribbonCreateActions() -<% if [[$:/github-ribbon]!is[tiddler]] %> +<%if [[$:/github-ribbon]!is[tiddler]] %> <$action-setfield $tiddler="$:/github-ribbon" $field="text" $value=<<ribbonCode>> tags="$:/tags/PageTemplate" code-body="yes" /> -<% endif %> +<%endif%> <$action-navigate $to="$:/github-ribbon" /> \end @@ -18,9 +18,9 @@ title: $:/plugins/tiddlywiki/github-fork-ribbon/usage <$button actions=<<ribbonCreateActions>> > <%if [[$:/github-ribbon]!is[tiddler]] %> Create -<% else %> +<%else%> Show -<% endif %> ~$:/github-ribbon +<%endif%> ~$:/github-ribbon </$button> \end From 149bba62d2a031a38c4fbdf2bdd67602a645abe6 Mon Sep 17 00:00:00 2001 From: Jeremy Ruston <jeremy@jermolene.com> Date: Mon, 2 Sep 2024 20:57:03 +0100 Subject: [PATCH 17/82] Fix typos in Saving with TiddlyPWA --- editions/tw5.com/tiddlers/saving/Saving with TiddlyPWA.tid | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/editions/tw5.com/tiddlers/saving/Saving with TiddlyPWA.tid b/editions/tw5.com/tiddlers/saving/Saving with TiddlyPWA.tid index ab2ef2c2b..c8555bdd0 100644 --- a/editions/tw5.com/tiddlers/saving/Saving with TiddlyPWA.tid +++ b/editions/tw5.com/tiddlers/saving/Saving with TiddlyPWA.tid @@ -3,11 +3,11 @@ color: #E056B4 community-author: Val Packett created: 20240902162617154 delivery: Progressive Web Application -description: Save to browser storage +description: Save to Browser Storage method: save modified: 20240902162617154 -tags: Chrome Firefox [[Internet Explorer]] Linux Mac Opera Safari Saving Windows iOS Edge -title: TiddlyPWA - Save to AWS or Google Storage +tags: Chrome Firefox Linux Mac Opera Safari Saving Windows iOS Edge +title: TiddlyPWA - Save to Browser Storage type: text/vnd.tiddlywiki ~TiddlyPWA turns TiddlyWiki 5 into an offline-first Progressive Web App with encrypted local persistent storage and efficient synchronization with a self-hosted server that can easily be hosted for free. From 9a3f1d25e55fa414f69416265f321fe4392ff68a Mon Sep 17 00:00:00 2001 From: Leilei332 <LeiYiXia29@outlook.com> Date: Fri, 6 Sep 2024 01:40:18 +0800 Subject: [PATCH 18/82] Update toolbar buttons to use v5.3.2 syntax (#8584) --- core/ui/EditToolbar/cancel.tid | 8 +-- core/ui/EditToolbar/delete.tid | 8 +-- core/ui/EditToolbar/save.tid | 11 ++-- core/ui/ViewToolbar/clone.tid | 8 +-- core/ui/ViewToolbar/close-others.tid | 8 +-- core/ui/ViewToolbar/close.tid | 8 +-- core/ui/ViewToolbar/edit.tid | 8 +-- core/ui/ViewToolbar/export-tiddler.tid | 5 +- core/ui/ViewToolbar/fold-others.tid | 8 +-- core/ui/ViewToolbar/fold.tid | 16 +++--- core/ui/ViewToolbar/info.tid | 17 +++--- core/ui/ViewToolbar/more-tiddler-actions.tid | 37 ++++++------- core/ui/ViewToolbar/new-here.tid | 14 +++-- core/ui/ViewToolbar/new-journal-here.tid | 26 ++++------ core/ui/ViewToolbar/open-window.tid | 8 +-- core/ui/ViewToolbar/permalink.tid | 8 +-- core/ui/ViewToolbar/permaview.tid | 8 +-- .../qrcode/ViewToolbarButton/Button.tid | 52 ++++++------------- .../text-slicer/ui/slice-toolbar-button.tid | 10 ++-- 19 files changed, 113 insertions(+), 155 deletions(-) diff --git a/core/ui/EditToolbar/cancel.tid b/core/ui/EditToolbar/cancel.tid index fe21c2e99..ca2248920 100644 --- a/core/ui/EditToolbar/cancel.tid +++ b/core/ui/EditToolbar/cancel.tid @@ -5,10 +5,10 @@ description: {{$:/language/Buttons/Cancel/Hint}} \whitespace trim <$button actions=<<cancel-delete-tiddler-actions "cancel">> tooltip={{$:/language/Buttons/Cancel/Hint}} aria-label={{$:/language/Buttons/Cancel/Caption}} class=<<tv-config-toolbar-class>>> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/cancel-button}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"><$text text={{$:/language/Buttons/Cancel/Caption}}/></span> -</$list> +<%endif%> </$button> diff --git a/core/ui/EditToolbar/delete.tid b/core/ui/EditToolbar/delete.tid index fcaed4b48..bdc6731b9 100644 --- a/core/ui/EditToolbar/delete.tid +++ b/core/ui/EditToolbar/delete.tid @@ -5,10 +5,10 @@ description: {{$:/language/Buttons/Delete/Hint}} \whitespace trim <$button actions=<<cancel-delete-tiddler-actions "delete">> tooltip={{$:/language/Buttons/Delete/Hint}} aria-label={{$:/language/Buttons/Delete/Caption}} class=<<tv-config-toolbar-class>>> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/delete-button}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"><$text text={{$:/language/Buttons/Delete/Caption}}/></span> -</$list> +<%endif%> </$button> diff --git a/core/ui/EditToolbar/save.tid b/core/ui/EditToolbar/save.tid index 3872e7674..b217806bb 100644 --- a/core/ui/EditToolbar/save.tid +++ b/core/ui/EditToolbar/save.tid @@ -4,8 +4,7 @@ caption: {{$:/core/images/done-button}} {{$:/language/Buttons/Save/Caption}} description: {{$:/language/Buttons/Save/Hint}} \whitespace trim -\define save-tiddler-button() -\whitespace trim +\procedure save-tiddler-button() <$fieldmangler> <$button tooltip={{$:/language/Buttons/Save/Hint}} @@ -13,12 +12,12 @@ description: {{$:/language/Buttons/Save/Hint}} class=<<tv-config-toolbar-class>> > <<save-tiddler-actions>> - <$list filter="[<tv-config-toolbar-icons>match[yes]]"> + <%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/done-button}} - </$list> - <$list filter="[<tv-config-toolbar-text>match[yes]]"> + <%endif%> + <%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"><$text text={{$:/language/Buttons/Save/Caption}}/></span> - </$list> + <%endif%> </$button> </$fieldmangler> \end diff --git a/core/ui/ViewToolbar/clone.tid b/core/ui/ViewToolbar/clone.tid index 434418106..abe01eda8 100644 --- a/core/ui/ViewToolbar/clone.tid +++ b/core/ui/ViewToolbar/clone.tid @@ -5,12 +5,12 @@ description: {{$:/language/Buttons/Clone/Hint}} \whitespace trim <$button message="tm-new-tiddler" param=<<currentTiddler>> tooltip={{$:/language/Buttons/Clone/Hint}} aria-label={{$:/language/Buttons/Clone/Caption}} class=<<tv-config-toolbar-class>>> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/clone-button}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"> <$text text={{$:/language/Buttons/Clone/Caption}}/> </span> -</$list> +<%endif%> </$button> \ No newline at end of file diff --git a/core/ui/ViewToolbar/close-others.tid b/core/ui/ViewToolbar/close-others.tid index 57fbf222c..19d996fda 100644 --- a/core/ui/ViewToolbar/close-others.tid +++ b/core/ui/ViewToolbar/close-others.tid @@ -5,12 +5,12 @@ description: {{$:/language/Buttons/CloseOthers/Hint}} \whitespace trim <$button message="tm-close-other-tiddlers" param=<<currentTiddler>> tooltip={{$:/language/Buttons/CloseOthers/Hint}} aria-label={{$:/language/Buttons/CloseOthers/Caption}} class=<<tv-config-toolbar-class>>> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/close-others-button}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"> <$text text={{$:/language/Buttons/CloseOthers/Caption}}/> </span> -</$list> +<%endif%> </$button> \ No newline at end of file diff --git a/core/ui/ViewToolbar/close.tid b/core/ui/ViewToolbar/close.tid index bd1fbe0ee..da4db1e26 100644 --- a/core/ui/ViewToolbar/close.tid +++ b/core/ui/ViewToolbar/close.tid @@ -5,12 +5,12 @@ description: {{$:/language/Buttons/Close/Hint}} \whitespace trim <$button message="tm-close-tiddler" tooltip={{$:/language/Buttons/Close/Hint}} aria-label={{$:/language/Buttons/Close/Caption}} class=<<tv-config-toolbar-class>>> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/close-button}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"> <$text text={{$:/language/Buttons/Close/Caption}}/> </span> -</$list> +<%endif%> </$button> \ No newline at end of file diff --git a/core/ui/ViewToolbar/edit.tid b/core/ui/ViewToolbar/edit.tid index f0ab31e4e..38827aa14 100644 --- a/core/ui/ViewToolbar/edit.tid +++ b/core/ui/ViewToolbar/edit.tid @@ -5,12 +5,12 @@ description: {{$:/language/Buttons/Edit/Hint}} \whitespace trim <$button message="tm-edit-tiddler" tooltip={{$:/language/Buttons/Edit/Hint}} aria-label={{$:/language/Buttons/Edit/Caption}} class=<<tv-config-toolbar-class>>> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/edit-button}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"> <$text text={{$:/language/Buttons/Edit/Caption}}/> </span> -</$list> +<%endif%> </$button> \ No newline at end of file diff --git a/core/ui/ViewToolbar/export-tiddler.tid b/core/ui/ViewToolbar/export-tiddler.tid index 8c39de856..9bb3d8853 100644 --- a/core/ui/ViewToolbar/export-tiddler.tid +++ b/core/ui/ViewToolbar/export-tiddler.tid @@ -3,7 +3,4 @@ tags: $:/tags/ViewToolbar caption: {{$:/core/images/export-button}} {{$:/language/Buttons/ExportTiddler/Caption}} description: {{$:/language/Buttons/ExportTiddler/Hint}} -\define makeExportFilter() -[[$(currentTiddler)$]] -\end -<$macrocall $name="exportButton" exportFilter=<<makeExportFilter>> lingoBase="$:/language/Buttons/ExportTiddler/" baseFilename=<<currentTiddler>>/> \ No newline at end of file +<$transclude $variable="exportButton" exportFilter=`[[$(currentTiddler)$]]` lingoBase="$:/language/Buttons/ExportTiddler/" baseFilename=<<currentTiddler>>/> \ No newline at end of file diff --git a/core/ui/ViewToolbar/fold-others.tid b/core/ui/ViewToolbar/fold-others.tid index 244977509..8734eaf33 100644 --- a/core/ui/ViewToolbar/fold-others.tid +++ b/core/ui/ViewToolbar/fold-others.tid @@ -6,12 +6,12 @@ description: {{$:/language/Buttons/FoldOthers/Hint}} \whitespace trim <$button tooltip={{$:/language/Buttons/FoldOthers/Hint}} aria-label={{$:/language/Buttons/FoldOthers/Caption}} class=<<tv-config-toolbar-class>>> <$action-sendmessage $message="tm-fold-other-tiddlers" $param=<<currentTiddler>> foldedStatePrefix="$:/state/folded/"/> -<$list filter="[<tv-config-toolbar-icons>match[yes]]" variable="listItem"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/fold-others-button}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"> <$text text={{$:/language/Buttons/FoldOthers/Caption}}/> </span> -</$list> +<%endif%> </$button> \ No newline at end of file diff --git a/core/ui/ViewToolbar/fold.tid b/core/ui/ViewToolbar/fold.tid index fd3363688..3c99c6ad6 100644 --- a/core/ui/ViewToolbar/fold.tid +++ b/core/ui/ViewToolbar/fold.tid @@ -7,26 +7,26 @@ description: {{$:/language/Buttons/Fold/Hint}} <$reveal type="nomatch" stateTitle=<<folded-state>> text="hide" default="show"> <$button tooltip={{$:/language/Buttons/Fold/Hint}} aria-label={{$:/language/Buttons/Fold/Caption}} class=<<tv-config-toolbar-class>>> <$action-sendmessage $message="tm-fold-tiddler" $param=<<currentTiddler>> foldedState=<<folded-state>>/> -<$list filter="[<tv-config-toolbar-icons>match[yes]]" variable="listItem"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/fold-button}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"> <$text text={{$:/language/Buttons/Fold/Caption}}/> </span> -</$list> +<%endif%> </$button> </$reveal> <$reveal type="match" stateTitle=<<folded-state>> text="hide" default="show"> <$button tooltip={{$:/language/Buttons/Unfold/Hint}} aria-label={{$:/language/Buttons/Unfold/Caption}} class=<<tv-config-toolbar-class>>> <$action-sendmessage $message="tm-fold-tiddler" $param=<<currentTiddler>> foldedState=<<folded-state>>/> -<$list filter="[<tv-config-toolbar-icons>match[yes]]" variable="listItem"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/unfold-button}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"> <$text text={{$:/language/Buttons/Unfold/Caption}}/> </span> -</$list> +<%endif%> </$button> </$reveal> diff --git a/core/ui/ViewToolbar/info.tid b/core/ui/ViewToolbar/info.tid index 02fd9abd7..95245d909 100644 --- a/core/ui/ViewToolbar/info.tid +++ b/core/ui/ViewToolbar/info.tid @@ -4,31 +4,30 @@ caption: {{$:/core/images/info-button}} {{$:/language/Buttons/Info/Caption}} description: {{$:/language/Buttons/Info/Hint}} \whitespace trim -\define button-content() -\whitespace trim -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +\procedure button-content() +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/info-button}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"> <$text text={{$:/language/Buttons/Info/Caption}}/> </span> -</$list> +<%endif%> \end <$reveal state="$:/config/TiddlerInfo/Mode" type="match" text="popup"> <$button popup=<<tiddlerInfoState>> tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=<<tv-config-toolbar-class>> selectedClass="tc-selected"> -<$macrocall $name="button-content" mode="inline"/> +<$transclude $variable="button-content" $mode="inline"/> </$button> </$reveal> <$reveal state="$:/config/TiddlerInfo/Mode" type="match" text="sticky"> <$reveal state=<<tiddlerInfoState>> type="match" text="" default=""> <$button set=<<tiddlerInfoState>> setTo="yes" tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=<<tv-config-toolbar-class>> selectedClass="tc-selected"> -<$macrocall $name="button-content" mode="inline"/> +<$transclude $variable="button-content" $mode="inline"/> </$button> </$reveal> <$reveal state=<<tiddlerInfoState>> type="nomatch" text="" default=""> <$button set=<<tiddlerInfoState>> setTo="" tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=<<tv-config-toolbar-class>> selectedClass="tc-selected"> -<$macrocall $name="button-content" mode="inline"/> +<$transclude $variable="button-content" $mode="inline"/> </$button> </$reveal> </$reveal> \ No newline at end of file diff --git a/core/ui/ViewToolbar/more-tiddler-actions.tid b/core/ui/ViewToolbar/more-tiddler-actions.tid index e7e75a79b..4528a4eee 100644 --- a/core/ui/ViewToolbar/more-tiddler-actions.tid +++ b/core/ui/ViewToolbar/more-tiddler-actions.tid @@ -4,7 +4,6 @@ caption: {{$:/core/images/down-arrow}} {{$:/language/Buttons/More/Caption}} description: {{$:/language/Buttons/More/Hint}} \whitespace trim -\define config-title() $:/config/ViewToolbarButtons/Visibility/$(listItem)$ <$button popup=<<qualify "$:/state/popup/more">> tooltip={{$:/language/Buttons/More/Hint}} @@ -12,33 +11,29 @@ description: {{$:/language/Buttons/More/Hint}} class=<<tv-config-toolbar-class>> selectedClass="tc-selected" > - <$list filter="[<tv-config-toolbar-icons>match[yes]]"> + <%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/down-arrow}} - </$list> - <$list filter="[<tv-config-toolbar-text>match[yes]]"> + <%endif%> + <%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"> <$text text={{$:/language/Buttons/More/Caption}}/> </span> - </$list> + <%endif%> </$button> <$reveal state=<<qualify "$:/state/popup/more">> type="popup" position="belowleft" animate="yes"> <div class="tc-drop-down"> - <$set name="tv-config-toolbar-icons" value="yes"> - <$set name="tv-config-toolbar-text" value="yes"> - <$set name="tv-config-toolbar-class" value="tc-btn-invisible"> - <$list filter="[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]] -[[$:/core/ui/Buttons/more-tiddler-actions]]" - variable="listItem" + <$let tv-config-toolbar-icons="yes" tv-config-toolbar-text="yes" tv-config-toolbar-class="tc-btn-invisible"> + <$list filter="[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]] -[[$:/core/ui/Buttons/more-tiddler-actions]]" + variable="listItem" + > + <$reveal type="match" state=`$:/config/ViewToolbarButtons/Visibility/$(listItem)$` text="hide"> + <$set name="tv-config-toolbar-class" + filter="[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]" > - <$reveal type="match" state=<<config-title>> text="hide"> - <$set name="tv-config-toolbar-class" - filter="[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]" - > - <$transclude tiddler=<<listItem>> mode="inline"/> - </$set> - </$reveal> - </$list> - </$set> - </$set> - </$set> + <$transclude tiddler=<<listItem>> mode="inline"/> + </$set> + </$reveal> + </$list> + </$let> </div> </$reveal> \ No newline at end of file diff --git a/core/ui/ViewToolbar/new-here.tid b/core/ui/ViewToolbar/new-here.tid index 31e8e4158..15afe2628 100644 --- a/core/ui/ViewToolbar/new-here.tid +++ b/core/ui/ViewToolbar/new-here.tid @@ -4,23 +4,21 @@ caption: {{$:/core/images/new-here-button}} {{$:/language/Buttons/NewHere/Captio description: {{$:/language/Buttons/NewHere/Hint}} \whitespace trim -\define newHereActions() -\whitespace trim +\procedure newHereActions() <$set name="tags" filter="[<currentTiddler>] [enlist{$:/config/NewTiddler/Tags}]"> <$action-sendmessage $message="tm-new-tiddler" tags=<<tags>>/> </$set> \end -\define newHereButton() -\whitespace trim +\procedure newHereButton() <$button actions=<<newHereActions>> tooltip={{$:/language/Buttons/NewHere/Hint}} aria-label={{$:/language/Buttons/NewHere/Caption}} class=<<tv-config-toolbar-class>>> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/new-here-button}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"> <$text text={{$:/language/Buttons/NewHere/Caption}}/> </span> -</$list> +<%endif%> </$button> \end <<newHereButton>> diff --git a/core/ui/ViewToolbar/new-journal-here.tid b/core/ui/ViewToolbar/new-journal-here.tid index b64ba7ed7..2df7a2a4e 100644 --- a/core/ui/ViewToolbar/new-journal-here.tid +++ b/core/ui/ViewToolbar/new-journal-here.tid @@ -4,29 +4,21 @@ caption: {{$:/core/images/new-journal-button}} {{$:/language/Buttons/NewJournalH description: {{$:/language/Buttons/NewJournalHere/Hint}} \whitespace trim -\define journalButtonTags() -[[$(currentTiddlerTag)$]] $(journalTags)$ -\end -\define journalButton() -\whitespace trim +\procedure journalButton() <$button tooltip={{$:/language/Buttons/NewJournalHere/Hint}} aria-label={{$:/language/Buttons/NewJournalHere/Caption}} class=<<tv-config-toolbar-class>>> -<$wikify name="journalTitle" text="""<$macrocall $name="now" format=<<journalTitleTemplate>>/>"""> -<$action-sendmessage $message="tm-new-tiddler" title=<<journalTitle>> tags=<<journalButtonTags>>/> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +<$wikify name="journalTitle" text="""<$transclude $variable="now" format=<<journalTitleTemplate>>/>"""> +<$action-sendmessage $message="tm-new-tiddler" title=<<journalTitle>> tags=`[[$(currentTiddlerTag)$]] $(journalTags)$`/> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/new-journal-button}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"> <$text text={{$:/language/Buttons/NewJournalHere/Caption}}/> </span> -</$list> +<%endif%> </$wikify> </$button> \end -<$set name="journalTitleTemplate" value={{$:/config/NewJournal/Title}}> -<$set name="journalTags" value={{$:/config/NewJournal/Tags}}> -<$set name="currentTiddlerTag" value=<<currentTiddler>>> +<$let journalTitleTemplate={{$:/config/NewJournal/Title}} journalTags={{$:/config/NewJournal/Tags}} currentTiddlerTag=<<currentTiddler>>> <<journalButton>> -</$set> -</$set> -</$set> +</$let> diff --git a/core/ui/ViewToolbar/open-window.tid b/core/ui/ViewToolbar/open-window.tid index d8ef85c83..24e2efcca 100644 --- a/core/ui/ViewToolbar/open-window.tid +++ b/core/ui/ViewToolbar/open-window.tid @@ -5,12 +5,12 @@ description: {{$:/language/Buttons/OpenWindow/Hint}} \whitespace trim <$button message="tm-open-window" tooltip={{$:/language/Buttons/OpenWindow/Hint}} aria-label={{$:/language/Buttons/OpenWindow/Caption}} class=<<tv-config-toolbar-class>>> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/open-window}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"> <$text text={{$:/language/Buttons/OpenWindow/Caption}}/> </span> -</$list> +<%endif%> </$button> \ No newline at end of file diff --git a/core/ui/ViewToolbar/permalink.tid b/core/ui/ViewToolbar/permalink.tid index 5d0677eed..4e9868b43 100644 --- a/core/ui/ViewToolbar/permalink.tid +++ b/core/ui/ViewToolbar/permalink.tid @@ -5,12 +5,12 @@ description: {{$:/language/Buttons/Permalink/Hint}} \whitespace trim <$button message="tm-permalink" tooltip={{$:/language/Buttons/Permalink/Hint}} aria-label={{$:/language/Buttons/Permalink/Caption}} class=<<tv-config-toolbar-class>>> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/permalink-button}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"> <$text text={{$:/language/Buttons/Permalink/Caption}}/> </span> -</$list> +<%endif%> </$button> \ No newline at end of file diff --git a/core/ui/ViewToolbar/permaview.tid b/core/ui/ViewToolbar/permaview.tid index 4a655b970..1ab129eed 100644 --- a/core/ui/ViewToolbar/permaview.tid +++ b/core/ui/ViewToolbar/permaview.tid @@ -5,12 +5,12 @@ description: {{$:/language/Buttons/Permaview/Hint}} \whitespace trim <$button message="tm-permaview" tooltip={{$:/language/Buttons/Permaview/Hint}} aria-label={{$:/language/Buttons/Permaview/Caption}} class=<<tv-config-toolbar-class>>> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/permaview-button}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"> <$text text={{$:/language/Buttons/Permaview/Caption}}/> </span> -</$list> +<%endif%> </$button> \ No newline at end of file diff --git a/plugins/tiddlywiki/qrcode/ViewToolbarButton/Button.tid b/plugins/tiddlywiki/qrcode/ViewToolbarButton/Button.tid index 2a6335545..7ac85af19 100644 --- a/plugins/tiddlywiki/qrcode/ViewToolbarButton/Button.tid +++ b/plugins/tiddlywiki/qrcode/ViewToolbarButton/Button.tid @@ -8,50 +8,28 @@ description: Generate QR code for this tiddler \whitespace trim <span class="tc-popup-keep"> <$button popup=<<qualify "$:/state/popup/qrcode">> tooltip={{$:/plugins/tiddlywiki/qrcode/ViewToolbarButton!!description}} aria-label={{$:/plugins/tiddlywiki/qrcode/ViewToolbarButton!!short-caption}} class=<<tv-config-toolbar-class>> class=<<tv-config-toolbar-class>> selectedClass="tc-selected"> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/plugins/tiddlywiki/qrcode/icon}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"> <$text text={{$:/plugins/tiddlywiki/qrcode/ViewToolbarButton!!short-caption}}/> </span> -</$list> +<%endif%> </$button> </span> <$reveal state=<<qualify "$:/state/popup/qrcode">> type="popup" position="below" animate="yes"> + <div class="tc-drop-down"> -<div class="tc-drop-down"> - -{{$:/plugins/tiddlywiki/qrcode/ViewToolbarButton||description}} - -<$set name="tv-config-toolbar-icons" value="yes"> - -<$set name="tv-config-toolbar-text" value="yes"> - -<$set name="tv-config-toolbar-class" value="tc-btn-invisible"> - -<$set name="targetTiddler" value=<<currentTiddler>>> - -<$list filter="[all[shadows+tiddlers]tag[$:/tags/ViewToolbarButton/QRcode]!has[draft.of]]"> - -<$button popup=<<qualify "$:/state/popup/qrcode/type">> class="tc-btn-invisible" selectedClass="tc-selected"> - -<$action-sendmessage $message="tm-modal" $param=<<currentTiddler>> currentTiddler=<<targetTiddler>>/> - -<$transclude field="caption" mode="inline"/> - -</$button> - -</$list> - -</$set> - -</$set> - -</$set> - -</$set> - -</div> + {{$:/plugins/tiddlywiki/qrcode/ViewToolbarButton||description}} + <$let tv-config-toolbar-icons="yes" tv-config-toolbar-text="yes" tv-config-toolbar-class="tc-btn-invisible" targetTiddler=<<currentTiddler>>> + <$list filter="[all[shadows+tiddlers]tag[$:/tags/ViewToolbarButton/QRcode]!has[draft.of]]"> + <$button popup=<<qualify "$:/state/popup/qrcode/type">> class="tc-btn-invisible" selectedClass="tc-selected"> + <$action-sendmessage $message="tm-modal" $param=<<currentTiddler>> currentTiddler=<<targetTiddler>>/> + <$transclude field="caption" mode="inline"/> + </$button> + </$list> + </$let> + </div> </$reveal> diff --git a/plugins/tiddlywiki/text-slicer/ui/slice-toolbar-button.tid b/plugins/tiddlywiki/text-slicer/ui/slice-toolbar-button.tid index ef53223d2..0a9b41414 100644 --- a/plugins/tiddlywiki/text-slicer/ui/slice-toolbar-button.tid +++ b/plugins/tiddlywiki/text-slicer/ui/slice-toolbar-button.tid @@ -6,18 +6,18 @@ description: Slice this text tiddler by headings and lists \whitespace trim -\define hint() +\procedure hint() Slice this text tiddler into chunks \end <$list filter="[<currentTiddler>!is[image]!is[binary]]" variable="ignore"> <$button tooltip=<<hint>> aria-label=<<hint>> class=<<tv-config-toolbar-class>>> <$action-sendmessage $message="tm-modal" $param="$:/plugins/tiddlywiki/text-slicer/ui/slice-modal" currentTiddler=<<currentTiddler>>/> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/plugins/tiddlywiki/text-slicer/images/text-slicer-icon}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text">Slice tiddler</span> -</$list> +<%endif%> </$button> </$list> From f0cb57fad883ac0b3dccf607108d71bac44ebe2f Mon Sep 17 00:00:00 2001 From: Leilei332 <LeiYiXia29@outlook.com> Date: Sat, 7 Sep 2024 02:39:41 +0800 Subject: [PATCH 19/82] Update docs for base64 operators (#8575) * Update docs for decodebase64 and encodebase64 operator * Add exmaples for decodebase64 and encodebase64 operator --- .../filters/decodebase64 Operator (Examples).tid | 10 ++++++++++ .../tw5.com/tiddlers/filters/decodebase64 Operator.tid | 8 +++++--- .../filters/encodebase64 Operator (Examples).tid | 10 ++++++++++ .../tw5.com/tiddlers/filters/encodebase64 Operator.tid | 8 +++++--- 4 files changed, 30 insertions(+), 6 deletions(-) create mode 100644 editions/tw5.com/tiddlers/filters/decodebase64 Operator (Examples).tid create mode 100644 editions/tw5.com/tiddlers/filters/encodebase64 Operator (Examples).tid diff --git a/editions/tw5.com/tiddlers/filters/decodebase64 Operator (Examples).tid b/editions/tw5.com/tiddlers/filters/decodebase64 Operator (Examples).tid new file mode 100644 index 000000000..6a79011e3 --- /dev/null +++ b/editions/tw5.com/tiddlers/filters/decodebase64 Operator (Examples).tid @@ -0,0 +1,10 @@ +created: 20240831025944330 +modified: 20240831041423075 +tags: [[decodebase64 Operator]] [[Operator Examples]] +title: decodebase64 Operator (Examples) + +<<.operator-example 1 "[[dGVzdA==]decodebase64[]]">> + +<<.operator-example 2 "[[8J+Yjg==]decodebase64[]]">> + +<<.operator-example 3 "[[8J-Yjg==]decodebase64:urlsafe[]]">> \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/filters/decodebase64 Operator.tid b/editions/tw5.com/tiddlers/filters/decodebase64 Operator.tid index 0d3a61920..5421ddf8f 100644 --- a/editions/tw5.com/tiddlers/filters/decodebase64 Operator.tid +++ b/editions/tw5.com/tiddlers/filters/decodebase64 Operator.tid @@ -1,14 +1,16 @@ caption: decodebase64 +created: 20240831034919913 +from-version: 5.2.6 +modified: 20240831034931703 op-input: a [[selection of titles|Title Selection]] op-output: the input with base 64 decoding applied -op-suffix: optional: `binary` to produce binary output, `urlsafe` for URL-safe input op-parameter: op-parameter-name: -op-purpose: apply base 64 decoding to a string +op-purpose: apply [[base 64|Base64]] decoding to a string +op-suffix: optional: `binary` to produce binary output, `urlsafe` for URL-safe input tags: [[Filter Operators]] [[String Operators]] title: decodebase64 Operator type: text/vnd.tiddlywiki -from-version: 5.2.6 See Mozilla Developer Network for details of [[base 64 encoding|https://developer.mozilla.org/en-US/docs/Glossary/Base64]]. TiddlyWiki uses [[library code from @nijikokun|https://gist.github.com/Nijikokun/5192472]] to handle the conversion. diff --git a/editions/tw5.com/tiddlers/filters/encodebase64 Operator (Examples).tid b/editions/tw5.com/tiddlers/filters/encodebase64 Operator (Examples).tid new file mode 100644 index 000000000..c49aff77a --- /dev/null +++ b/editions/tw5.com/tiddlers/filters/encodebase64 Operator (Examples).tid @@ -0,0 +1,10 @@ +created: 20240831025156306 +modified: 20240831041537886 +tags: [[encodebase64 Operator]] [[Operator Examples]] +title: encodebase64 Operator (Examples) + +<<.operator-example 1 "[[test]encodebase64[]]">> + +<<.operator-example 2 "[[😎]encodebase64[]]">> + +<<.operator-example 3 "[[😎]encodebase64:urlsafe[]]">> \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/filters/encodebase64 Operator.tid b/editions/tw5.com/tiddlers/filters/encodebase64 Operator.tid index a7943d726..918d656d2 100644 --- a/editions/tw5.com/tiddlers/filters/encodebase64 Operator.tid +++ b/editions/tw5.com/tiddlers/filters/encodebase64 Operator.tid @@ -1,14 +1,16 @@ caption: encodebase64 +created: 20240831034955575 +from-version: 5.2.6 +modified: 20240831035003716 op-input: a [[selection of titles|Title Selection]] op-output: the input with base 64 encoding applied -op-suffix: optional: `binary` to treat input as binary data, `urlsafe` for URL-safe output op-parameter: op-parameter-name: -op-purpose: apply base 64 encoding to a string +op-purpose: apply [[base 64|Base64]] encoding to a string +op-suffix: optional: `binary` to treat input as binary data, `urlsafe` for URL-safe output tags: [[Filter Operators]] [[String Operators]] title: encodebase64 Operator type: text/vnd.tiddlywiki -from-version: 5.2.6 See Mozilla Developer Network for details of [[base 64 encoding|https://developer.mozilla.org/en-US/docs/Glossary/Base64]]. TiddlyWiki uses [[library code from @nijikokun|https://gist.github.com/Nijikokun/5192472]] to handle the conversion. From dcf63b75fa09f52da7cfd5997cb30ab0216025a9 Mon Sep 17 00:00:00 2001 From: Leilei332 <LeiYiXia29@outlook.com> Date: Sat, 7 Sep 2024 02:40:05 +0800 Subject: [PATCH 20/82] Fix suffix does not work for base64 operators (#8574) * Fix suffix does not work for base64 operators * Remove console.log --- core/modules/filters/encodings.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core/modules/filters/encodings.js b/core/modules/filters/encodings.js index a43a15f76..231e4d119 100644 --- a/core/modules/filters/encodings.js +++ b/core/modules/filters/encodings.js @@ -18,8 +18,8 @@ Export our filter functions exports.decodebase64 = function(source,operator,options) { var results = []; - var binary = operator.suffixes && operator.suffixes.indexOf("binary") !== -1; - var urlsafe = operator.suffixes && operator.suffixes.indexOf("urlsafe") !== -1; + var binary = operator.suffixes && operator.suffixes[0].indexOf("binary") !== -1; + var urlsafe = operator.suffixes && operator.suffixes[0].indexOf("urlsafe") !== -1; source(function(tiddler,title) { results.push($tw.utils.base64Decode(title,binary,urlsafe)); }); @@ -28,8 +28,8 @@ exports.decodebase64 = function(source,operator,options) { exports.encodebase64 = function(source,operator,options) { var results = []; - var binary = operator.suffixes && operator.suffixes.indexOf("binary") !== -1; - var urlsafe = operator.suffixes && operator.suffixes.indexOf("urlsafe") !== -1; + var binary = operator.suffixes && operator.suffixes[0].indexOf("binary") !== -1; + var urlsafe = operator.suffixes && operator.suffixes[0].indexOf("urlsafe") !== -1; source(function(tiddler,title) { results.push($tw.utils.base64Encode(title,binary,urlsafe)); }); From 38657a232368adced318f1cb0d5f6cfa58c2eb66 Mon Sep 17 00:00:00 2001 From: Mario Pietsch <pmariojo@gmail.com> Date: Fri, 6 Sep 2024 20:46:53 +0200 Subject: [PATCH 21/82] tm-new-tiddler - Create empty tags field only if template or additionalFields contain a tags-field (#8559) * create empty tags only if template or additionalFields contain a tags-field * fix typos * add tests for tm-new-tiddler message * tm-new-tiddler add standard test with tags field --- core/modules/widgets/navigator.js | 14 ++-- .../create-a-new-tiddler-with-a-tag.tid | 38 +++++++++++ .../data/messages/tm-new-tiddler/default.tid | 39 +++++++++++ .../new-from-template-with-tag.tid | 44 +++++++++++++ .../new-from-template-without-tag.tid | 65 +++++++++++++++++++ .../messages/tm-new-tiddler/new-with-tag.tid | 40 ++++++++++++ 6 files changed, 235 insertions(+), 5 deletions(-) create mode 100644 editions/test/tiddlers/tests/data/messages/tm-new-tiddler/create-a-new-tiddler-with-a-tag.tid create mode 100644 editions/test/tiddlers/tests/data/messages/tm-new-tiddler/default.tid create mode 100644 editions/test/tiddlers/tests/data/messages/tm-new-tiddler/new-from-template-with-tag.tid create mode 100644 editions/test/tiddlers/tests/data/messages/tm-new-tiddler/new-from-template-without-tag.tid create mode 100644 editions/test/tiddlers/tests/data/messages/tm-new-tiddler/new-with-tag.tid diff --git a/core/modules/widgets/navigator.js b/core/modules/widgets/navigator.js index efdbba83f..e9bec7682 100755 --- a/core/modules/widgets/navigator.js +++ b/core/modules/widgets/navigator.js @@ -184,7 +184,7 @@ NavigatorWidget.prototype.handleCloseOtherTiddlersEvent = function(event) { // Place a tiddler in edit mode NavigatorWidget.prototype.handleEditTiddlerEvent = function(event) { var editTiddler = $tw.hooks.invokeHook("th-editing-tiddler",event), - win = event.event && event.event.view ? event.event.view : window; + win = event.event && event.event.view ? event.event.view : window; if(!editTiddler) { return false; } @@ -306,7 +306,7 @@ NavigatorWidget.prototype.handleSaveTiddlerEvent = function(event) { var title = event.param || event.tiddlerTitle, tiddler = this.wiki.getTiddler(title), storyList = this.getStoryList(), - win = event.event && event.event.view ? event.event.view : window; + win = event.event && event.event.view ? event.event.view : window; // Replace the original tiddler with the draft if(tiddler) { var draftTitle = (tiddler.fields["draft.title"] || "").trim(), @@ -412,7 +412,8 @@ NavigatorWidget.prototype.handleNewTiddlerEvent = function(event) { event = $tw.hooks.invokeHook("th-new-tiddler", event); // Get the story details var storyList = this.getStoryList(), - templateTiddler, additionalFields, title, draftTitle, existingTiddler; + templateTiddler, additionalFields, title, draftTitle, existingTiddler, + templateHasTags = false; // Get the template tiddler (if any) if(typeof event.param === "string") { // Get the template tiddler @@ -457,8 +458,10 @@ NavigatorWidget.prototype.handleNewTiddlerEvent = function(event) { // Merge tags mergedTags = $tw.utils.pushTop(mergedTags,$tw.utils.parseStringArray(additionalFields.tags)); } + var additionalFieldsHasTags = !!(additionalFields && (additionalFields.tags === "")); if(templateTiddler && templateTiddler.fields.tags) { // Merge tags + templateHasTags = true; mergedTags = $tw.utils.pushTop(mergedTags,templateTiddler.fields.tags); } // Save the draft tiddler @@ -474,7 +477,8 @@ NavigatorWidget.prototype.handleNewTiddlerEvent = function(event) { { title: draftTitle, "draft.of": title, - tags: mergedTags + // If template or additionalFields have "tags" even if empty a tags field will be created. + tags: ((mergedTags.length > 0) || templateHasTags || additionalFieldsHasTags) ? mergedTags : undefined },this.wiki.getModificationFields()); this.wiki.addTiddler(draftTiddler); // Update the story to insert the new draft at the top and remove any existing tiddler @@ -526,7 +530,7 @@ NavigatorWidget.prototype.handleImportTiddlersEvent = function(event) { var systemMessage = $tw.language.getString("Import/Upgrader/Tiddler/Unselected"); $tw.utils.each(messages,function(message,title) { newFields["message-" + title] = message; - if (message.indexOf(systemMessage) !== -1) { + if(message.indexOf(systemMessage) !== -1) { newFields["selection-" + title] = "unchecked"; } }); diff --git a/editions/test/tiddlers/tests/data/messages/tm-new-tiddler/create-a-new-tiddler-with-a-tag.tid b/editions/test/tiddlers/tests/data/messages/tm-new-tiddler/create-a-new-tiddler-with-a-tag.tid new file mode 100644 index 000000000..3f9204da8 --- /dev/null +++ b/editions/test/tiddlers/tests/data/messages/tm-new-tiddler/create-a-new-tiddler-with-a-tag.tid @@ -0,0 +1,38 @@ +title: Message/tm-new-tiddler/create-a-new-tiddler-with-a-tag +description: tm-new-tiddler message will create a new draft tiddler with a tag +type: text/vnd.tiddlywiki-multiple +tags: [[$:/tags/wiki-test-spec]] + +title: Output + +<pre>{{Draft of 'New Tiddler'||output-template}}</pre> ++ +title: Actions + +<$navigator story="$:/StoryList"> + +<$action-sendmessage $message="tm-new-tiddler" + text="some text" + z-field="a" + tags="test [[with spaces]]" +/> + +</$navigator> + ++ +title: output-template + +<!-- This template is used for saving tiddlers in TiddlyWeb *.tid format --> +<$fields exclude='text bag created modified' template='$name$: $value$ +'></$fields> +<$view field="text" format="text" /> ++ +title: ExpectedResult + +<p><pre>draft.of: New Tiddler +draft.title: New Tiddler +tags: test [[with spaces]] +title: Draft of 'New Tiddler' +z-field: a + +some text</pre></p> \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/messages/tm-new-tiddler/default.tid b/editions/test/tiddlers/tests/data/messages/tm-new-tiddler/default.tid new file mode 100644 index 000000000..cba16f261 --- /dev/null +++ b/editions/test/tiddlers/tests/data/messages/tm-new-tiddler/default.tid @@ -0,0 +1,39 @@ +title: Message/tm-new-tiddler/default +description: tm-new-tiddler message will create a new draft tiddler +type: text/vnd.tiddlywiki-multiple +tags: [[$:/tags/wiki-test-spec]] + +title: Output + +<pre>{{Draft of 'New Tiddler'||output-template}}</pre> ++ +title: Actions + +<$navigator story="$:/StoryList"> + +New in TW v5.3.6 + Create a draft tiddler which should have __no__ tags field + +<$action-sendmessage $message="tm-new-tiddler" + text="some text" + z-field="a" +/> + +</$navigator> + ++ +title: output-template + +<!-- This template is used for saving tiddlers in TiddlyWeb *.tid format --> +<$fields exclude='text bag created modified' template='$name$: $value$ +'></$fields> +<$view field="text" format="text" /> ++ +title: ExpectedResult + +<p><pre>draft.of: New Tiddler +draft.title: New Tiddler +title: Draft of 'New Tiddler' +z-field: a + +some text</pre></p> \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/messages/tm-new-tiddler/new-from-template-with-tag.tid b/editions/test/tiddlers/tests/data/messages/tm-new-tiddler/new-from-template-with-tag.tid new file mode 100644 index 000000000..aceeffdde --- /dev/null +++ b/editions/test/tiddlers/tests/data/messages/tm-new-tiddler/new-from-template-with-tag.tid @@ -0,0 +1,44 @@ +title: Message/tm-new-tiddler/new-from-template-with-tag +description: tm-new-tiddler create a draft from a template. Template has an empty tags field +type: text/vnd.tiddlywiki-multiple +tags: [[$:/tags/wiki-test-spec]] + +title: Output + +<pre>{{ Draft of 'new-tiddler-template 1'||output-template}}</pre> ++ +title: Actions + +<$navigator story="$:/StoryList"> + +<$action-sendmessage $message="tm-new-tiddler" + $param="new-tiddler-template" + text="some text" + z-field="a" +/> + +</$navigator> + ++ +title: new-tiddler-template +asdf: asdf +tags: + ++ +title: output-template + +<!-- This template is used for saving tiddlers in TiddlyWeb *.tid format --> +<$fields exclude='text bag created modified' template='$name$: $value$ +'></$fields> +<$view field="text" format="text" /> ++ +title: ExpectedResult + +<p><pre>asdf: asdf +draft.of: new-tiddler-template 1 +draft.title: new-tiddler-template 1 +tags: +title: Draft of 'new-tiddler-template 1' +z-field: a + +some text</pre></p> \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/messages/tm-new-tiddler/new-from-template-without-tag.tid b/editions/test/tiddlers/tests/data/messages/tm-new-tiddler/new-from-template-without-tag.tid new file mode 100644 index 000000000..dfb815f09 --- /dev/null +++ b/editions/test/tiddlers/tests/data/messages/tm-new-tiddler/new-from-template-without-tag.tid @@ -0,0 +1,65 @@ +title: Message/tm-new-tiddler/new-from-template-without-tag +description: tm-new-tiddler create 2 drafts from a template. Template has no tags field +type: text/vnd.tiddlywiki-multiple +tags: [[$:/tags/wiki-test-spec]] + +title: Output + +<pre>{{ Draft of 'new-tiddler-template 1'||output-template}}</pre> +<pre>{{ Draft of 'new-tiddler-template 2'||output-template}}</pre> ++ +title: Actions + +<$navigator story="$:/StoryList"> + +New in TW v5.3.6 + Create a new tiddler from a template, which has no tags field + So draft should also have __no__ tags field + +<$action-sendmessage $message="tm-new-tiddler" + $param="new-tiddler-template" + text="some text" + z-field="a" +/> + +Create a new tiddler from a template, which has no tag field +AND __add__ a tags field with the command below + +<$action-sendmessage $message="tm-new-tiddler" + $param="new-tiddler-template" + text="some text" + z-field="a" + tag="" +/> + +</$navigator> + ++ +title: new-tiddler-template +asdf: asdf + ++ +title: output-template + +<!-- This template is used for saving tiddlers in TiddlyWeb *.tid format --> +<$fields exclude='text bag created modified' template='$name$: $value$ +'></$fields> +<$view field="text" format="text" /> ++ +title: ExpectedResult + +<p><pre>asdf: asdf +draft.of: new-tiddler-template 1 +draft.title: new-tiddler-template 1 +title: Draft of 'new-tiddler-template 1' +z-field: a + +some text</pre> +<pre>asdf: asdf +draft.of: new-tiddler-template 2 +draft.title: new-tiddler-template 2 +tag: +title: Draft of 'new-tiddler-template 2' +z-field: a + +some text</pre></p> \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/messages/tm-new-tiddler/new-with-tag.tid b/editions/test/tiddlers/tests/data/messages/tm-new-tiddler/new-with-tag.tid new file mode 100644 index 000000000..9b52e7de1 --- /dev/null +++ b/editions/test/tiddlers/tests/data/messages/tm-new-tiddler/new-with-tag.tid @@ -0,0 +1,40 @@ +title: Message/tm-new-tiddler/new-with-tag +description: tm-new-tiddler message creates a draft tiddler with an empty tag field +type: text/vnd.tiddlywiki-multiple +tags: [[$:/tags/wiki-test-spec]] + +title: Output + +<pre>{{Draft of 'New Tiddler'||output-template}}</pre> ++ +title: Actions + +<$navigator story="$:/StoryList"> + +Create a draft tiddler which __should have a tags field__ + +<$action-sendmessage $message="tm-new-tiddler" + text="some text" + z-field="a" + tag="" +/> + +</$navigator> + ++ +title: output-template + +<!-- This template is used for saving tiddlers in TiddlyWeb *.tid format --> +<$fields exclude='text bag created modified' template='$name$: $value$ +'></$fields> +<$view field="text" format="text" /> ++ +title: ExpectedResult + +<p><pre>draft.of: New Tiddler +draft.title: New Tiddler +tag: +title: Draft of 'New Tiddler' +z-field: a + +some text</pre></p> \ No newline at end of file From 7f2ab57f78e51bddba2193fe2978f96f98deda17 Mon Sep 17 00:00:00 2001 From: Simon Baird <sbaird@redhat.com> Date: Fri, 6 Sep 2024 14:55:51 -0400 Subject: [PATCH 22/82] Fix invalid accept header in put saver (#8547) IIUC the charset doesn't belong in the Accept header. It does belong in a Content-Type header though, see [1] and [2]. FYI this header causes problems for Tiddlyhost which must work around the invalid mime type, see [3] for the nitty-gritty. [1] https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept [2] https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type [3] https://github.com/simonbaird/tiddlyhost/commit/10cd3535529adf9ec1241ab8cd639ba1a2abb16f --- core/modules/savers/put.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/modules/savers/put.js b/core/modules/savers/put.js index 87fe5f710..69689e6db 100644 --- a/core/modules/savers/put.js +++ b/core/modules/savers/put.js @@ -20,7 +20,7 @@ Retrieve ETag if available */ var retrieveETag = function(self) { var headers = { - Accept: "*/*;charset=UTF-8" + Accept: "*/*" }; $tw.utils.httpRequest({ url: self.uri(), From dc7f8cb0af68c53607a11760ce869e91a137ac74 Mon Sep 17 00:00:00 2001 From: Leilei332 <LeiYiXia29@outlook.com> Date: Sat, 7 Sep 2024 22:04:55 +0800 Subject: [PATCH 23/82] Add docs for some hidden settings (#8508) * Add docs for $:/config/EmptyStoryMessage in hidden settings * Add docs for $:/config/DefaultTiddlerColour --- ...tting Content to be displayed for empty story.tid | 12 ++++++++++++ .../Hidden Setting Default Tiddler Colour.tid | 7 +++++++ 2 files changed, 19 insertions(+) create mode 100644 editions/tw5.com/tiddlers/hiddensettings/Hidden Setting Content to be displayed for empty story.tid create mode 100644 editions/tw5.com/tiddlers/hiddensettings/Hidden Setting Default Tiddler Colour.tid diff --git a/editions/tw5.com/tiddlers/hiddensettings/Hidden Setting Content to be displayed for empty story.tid b/editions/tw5.com/tiddlers/hiddensettings/Hidden Setting Content to be displayed for empty story.tid new file mode 100644 index 000000000..f3497d5be --- /dev/null +++ b/editions/tw5.com/tiddlers/hiddensettings/Hidden Setting Content to be displayed for empty story.tid @@ -0,0 +1,12 @@ +created: 20240811052854726 +modified: 20240811053649554 +tags: [[Hidden Settings]] +title: Hidden Setting: Content to be displayed for empty story + +To display content when the story is empty, create $:/config/EmptyStoryMessage and enter the desired contents. + +The following would show the GettingStarted tiddler when all others are closed. + +``` +{{GettingStarted||$:/core/ui/ViewTemplate}} +``` \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/hiddensettings/Hidden Setting Default Tiddler Colour.tid b/editions/tw5.com/tiddlers/hiddensettings/Hidden Setting Default Tiddler Colour.tid new file mode 100644 index 000000000..e8bb0dc87 --- /dev/null +++ b/editions/tw5.com/tiddlers/hiddensettings/Hidden Setting Default Tiddler Colour.tid @@ -0,0 +1,7 @@ +created: 20240907042443909 +modified: 20240907042629405 +tags: [[Hidden Settings]] +title: Hidden Setting: Default Tiddler Colour +type: text/vnd.tiddlywiki + +A default tiddler colour can be specified by creating a tiddler called $:/config/DefaultTiddlerColour containing the title of the tiddler containing the CSS color value. From 4327d58c1b3a90981ad8543633008006e4cf8b5e Mon Sep 17 00:00:00 2001 From: Leilei332 <LeiYiXia29@outlook.com> Date: Sun, 8 Sep 2024 20:41:32 +0800 Subject: [PATCH 24/82] Fix description for $:/config/DefaultTiddlerColour (#8588) A small fix after #8508 --- .../hiddensettings/Hidden Setting Default Tiddler Colour.tid | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/editions/tw5.com/tiddlers/hiddensettings/Hidden Setting Default Tiddler Colour.tid b/editions/tw5.com/tiddlers/hiddensettings/Hidden Setting Default Tiddler Colour.tid index e8bb0dc87..649fd7629 100644 --- a/editions/tw5.com/tiddlers/hiddensettings/Hidden Setting Default Tiddler Colour.tid +++ b/editions/tw5.com/tiddlers/hiddensettings/Hidden Setting Default Tiddler Colour.tid @@ -4,4 +4,4 @@ tags: [[Hidden Settings]] title: Hidden Setting: Default Tiddler Colour type: text/vnd.tiddlywiki -A default tiddler colour can be specified by creating a tiddler called $:/config/DefaultTiddlerColour containing the title of the tiddler containing the CSS color value. +A default tiddler colour can be specified by creating a tiddler called $:/config/DefaultTiddlerColour containing the CSS color value. From d827c57dcf3229f799d112567a0be2080a9d61c4 Mon Sep 17 00:00:00 2001 From: Mario Pietsch <pmariojo@gmail.com> Date: Sun, 8 Sep 2024 16:57:55 +0200 Subject: [PATCH 25/82] Make export macros code readable without changing any functionality (#8513) --- core/wiki/macros/export.tid | 61 ++++++++++++++++++++++++------------- 1 file changed, 39 insertions(+), 22 deletions(-) diff --git a/core/wiki/macros/export.tid b/core/wiki/macros/export.tid index 3d0d14760..42d42a48a 100644 --- a/core/wiki/macros/export.tid +++ b/core/wiki/macros/export.tid @@ -7,27 +7,44 @@ $baseFilename$$(extension)$ \define exportButton(exportFilter:"[!is[system]sort[title]]",lingoBase,baseFilename:"tiddlers") \whitespace trim -<$vars hint={{{ [<__lingoBase__>addsuffix[Hint]get[text]] }}} caption={{{ [<__lingoBase__>addsuffix[Caption]get[text]] }}}> -<span class="tc-popup-keep"><$button popup=<<qualify "$:/state/popup/export">> tooltip=<<hint>> aria-label=<<caption>> class=<<tv-config-toolbar-class>> selectedClass="tc-selected"> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> -{{$:/core/images/export-button}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> -<span class="tc-btn-text"><$text text=<<caption>>/></span> -</$list> -</$button></span></$vars><$reveal state=<<qualify "$:/state/popup/export">> type="popup" position="below" animate="yes"> -<div class="tc-drop-down"> -<$set name="count" value={{{ [subfilter<__exportFilter__>count[]] }}}> -<$list filter="[all[shadows+tiddlers]tag[$:/tags/Exporter]]"> -<$list filter="[<currentTiddler>has[condition]subfilter{!!condition}limit[1]] ~[<currentTiddler>!has[condition]then[true]]" variable="ignore"> -<$button class="tc-btn-invisible"> -<$action-sendmessage $message="tm-download-file" $param=<<currentTiddler>> exportFilter=<<__exportFilter__>> filename={{{ [<__baseFilename__>addsuffix{!!extension}] }}}/> -<$action-deletetiddler $tiddler=<<qualify "$:/state/popup/export">>/> -<$transclude field="description"/> -</$button> -</$list> -</$list> -</$set> -</div> +<$vars hint={{{ [<__lingoBase__>addsuffix[Hint]get[text]] }}} + caption={{{ [<__lingoBase__>addsuffix[Caption]get[text]] }}} +> + <span class="tc-popup-keep"> + <$button popup=<<qualify "$:/state/popup/export">> + tooltip=<<hint>> + aria-label=<<caption>> + class=<<tv-config-toolbar-class>> + selectedClass="tc-selected" + > + <$list filter="[<tv-config-toolbar-icons>match[yes]]"> + {{$:/core/images/export-button}} + </$list> + <$list filter="[<tv-config-toolbar-text>match[yes]]"> + <span class="tc-btn-text"><$text text=<<caption>>/></span> + </$list> + </$button> + </span> +</$vars> +<$reveal state=<<qualify "$:/state/popup/export">> type="popup" position="below" animate="yes"> + <div class="tc-drop-down"> + <$set name="count" value={{{ [subfilter<__exportFilter__>count[]] }}}> + <$list filter="[all[shadows+tiddlers]tag[$:/tags/Exporter]]"> + <$list filter="[<currentTiddler>has[condition]subfilter{!!condition}limit[1]] ~[<currentTiddler>!has[condition]then[true]]" + variable="ignore" + > + <$button class="tc-btn-invisible"> + <$action-sendmessage $message="tm-download-file" + $param=<<currentTiddler>> + exportFilter=<<__exportFilter__>> + filename={{{ [<__baseFilename__>addsuffix{!!extension}] }}} + /> + <$action-deletetiddler $tiddler=<<qualify "$:/state/popup/export">>/> + <$transclude field="description"/> + </$button> + </$list> + </$list> + </$set> + </div> </$reveal> \end From e1b3308a9ddafebd7352d76b7480037d50515008 Mon Sep 17 00:00:00 2001 From: Mario Pietsch <pmariojo@gmail.com> Date: Mon, 9 Sep 2024 10:48:57 +0200 Subject: [PATCH 26/82] Fix float right overflow (#8557) * tc-subtitle is not a sibling to tc-body, So tc-subtitle needs a clearfix to contains float:right * add clearfix to all tiddler elements that could contain floats * add clearfix to tc-tiddler-title in ViewTemplate * add clearfix to plugin/blog/templates * add clearfix to plugin/tour/templates * remove test tiddler * rename draft title class to tc-tiddler-title-draft * undo title field covering * move tc-clearfix to tc-float-right in the base CSS file * rename clearfix CSS class to tc-clearfix * update documentation tiddlers --- core/templates/server/static.tiddler.wikitext.tid | 8 ++++---- core/ui/EditTemplate/controls.tid | 3 +-- core/ui/ViewTemplate/body.tid | 2 +- core/ui/ViewTemplate/subtitle/default.tid | 2 +- core/ui/ViewTemplate/title.tid | 2 +- .../tw5.com/tiddlers/definitions/Tiddlyhost.tid | 7 +++---- editions/tw5.com/tiddlers/definitions/Xememex.tid | 7 +++---- .../tw5.com/tiddlers/wikitext/Utility Classes.tid | 2 +- plugins/tiddlywiki/blog/templates/tiddler.tid | 4 ++-- .../tour/simplified-tiddler-with-tags.tid | 8 ++++---- plugins/tiddlywiki/tour/simplified-tiddler.tid | 4 ++-- themes/tiddlywiki/vanilla/base.tid | 15 +++++++++++---- 12 files changed, 34 insertions(+), 30 deletions(-) diff --git a/core/templates/server/static.tiddler.wikitext.tid b/core/templates/server/static.tiddler.wikitext.tid index 2d2bdaba6..1f2ee3cf4 100644 --- a/core/templates/server/static.tiddler.wikitext.tid +++ b/core/templates/server/static.tiddler.wikitext.tid @@ -1,23 +1,23 @@ title: $:/core/templates/server/static.tiddler.wikitext \whitespace trim -<div class="tc-tiddler-title"> +<div class="tc-tiddler-title tc-clearfix"> <div class="tc-titlebar"> <h2><$text text=<<currentTiddler>>/></h2> </div> </div> -<div class="tc-subtitle"> +<div class="tc-subtitle tc-clearfix"> <$link to={{!!modifier}}> <$view field="modifier"/> </$link> <$view field="modified" format="date" template={{$:/language/Tiddler/DateFormat}}/> </div> -<div class="tc-tags-wrapper"> +<div class="tc-tags-wrapper" tc-clearfix> <$list filter="[all[current]tags[]sort[title]]"> <a href={{{ [<currentTiddler>encodeuricomponent[]] }}}> <$macrocall $name="tag-pill" tag=<<currentTiddler>>/> </a> </$list> </div> -<div class="tc-tiddler-body"> +<div class="tc-tiddler-body tc-clearfix"> <$transclude mode="block"/> </div> diff --git a/core/ui/EditTemplate/controls.tid b/core/ui/EditTemplate/controls.tid index e97cedd78..3bb90aac1 100644 --- a/core/ui/EditTemplate/controls.tid +++ b/core/ui/EditTemplate/controls.tid @@ -3,7 +3,7 @@ tags: $:/tags/EditTemplate \define config-title() $:/config/EditToolbarButtons/Visibility/$(listItem)$ \whitespace trim -<div class="tc-tiddler-title tc-tiddler-edit-title"> +<div class="tc-tiddler-title tc-tiddler-edit-title tc-clearfix"> <$view field="title"/> <span class="tc-tiddler-controls tc-titlebar"> <$list filter="[all[shadows+tiddlers]tag[$:/tags/EditToolbar]!has[draft.of]]" variable="listItem"> @@ -14,5 +14,4 @@ tags: $:/tags/EditTemplate </$let> </$list> </span> - <div style="clear: both;"></div> </div> diff --git a/core/ui/ViewTemplate/body.tid b/core/ui/ViewTemplate/body.tid index 34e6aaa38..e4f03ec0e 100644 --- a/core/ui/ViewTemplate/body.tid +++ b/core/ui/ViewTemplate/body.tid @@ -3,7 +3,7 @@ tags: $:/tags/ViewTemplate \import [all[shadows+tiddlers]tag[$:/tags/Macro/View/Body]!is[draft]] [all[shadows+tiddlers]tag[$:/tags/Global/View/Body]!is[draft]] -<$reveal tag="div" class="tc-tiddler-body" type="nomatch" stateTitle=<<folded-state>> text="hide" retain="yes" animate="yes"> +<$reveal tag="div" class="tc-tiddler-body tc-clearfix" type="nomatch" stateTitle=<<folded-state>> text="hide" retain="yes" animate="yes"> <$transclude tiddler={{{ [<currentTiddler>] :cascade[all[shadows+tiddlers]tag[$:/tags/ViewTemplateBodyFilter]!is[draft]get[text]] :and[!is[blank]else[$:/core/ui/ViewTemplate/body/default]] }}} /> diff --git a/core/ui/ViewTemplate/subtitle/default.tid b/core/ui/ViewTemplate/subtitle/default.tid index 3885dc779..99042c95e 100644 --- a/core/ui/ViewTemplate/subtitle/default.tid +++ b/core/ui/ViewTemplate/subtitle/default.tid @@ -2,7 +2,7 @@ title: $:/core/ui/ViewTemplate/subtitle/default \whitespace trim <$reveal type="nomatch" stateTitle=<<folded-state>> text="hide" tag="div" retain="yes" animate="yes"> -<div class="tc-subtitle"> +<div class="tc-subtitle tc-clearfix"> <$list filter="[all[shadows+tiddlers]tag[$:/tags/ViewTemplate/Subtitle]!has[draft.of]]" variable="subtitleTiddler"> <$transclude tiddler=<<subtitleTiddler>> mode="inline"/><$list-join> </$list-join> </$list> diff --git a/core/ui/ViewTemplate/title.tid b/core/ui/ViewTemplate/title.tid index 225ea4351..b2cf1bd8e 100644 --- a/core/ui/ViewTemplate/title.tid +++ b/core/ui/ViewTemplate/title.tid @@ -4,7 +4,7 @@ tags: $:/tags/ViewTemplate \whitespace trim \define title-styles() fill:$(foregroundColor)$; -<div class="tc-tiddler-title"> +<div class="tc-tiddler-title tc-clearfix"> <div class="tc-titlebar"> <span class="tc-tiddler-controls"> <$list filter="[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]] :filter[lookup[$:/config/ViewToolbarButtons/Visibility/]!match[hide]]" diff --git a/editions/tw5.com/tiddlers/definitions/Tiddlyhost.tid b/editions/tw5.com/tiddlers/definitions/Tiddlyhost.tid index 8dee477da..3a9140237 100644 --- a/editions/tw5.com/tiddlers/definitions/Tiddlyhost.tid +++ b/editions/tw5.com/tiddlers/definitions/Tiddlyhost.tid @@ -1,12 +1,11 @@ -title: Tiddlyhost -tags: Definitions created: 20230410105035569 modified: 20230410105035569 +tags: Definitions +title: Tiddlyhost +type: text/vnd.tiddlywiki <span style="float:right;">[img width=140 [Tiddlyhost Logo]]</span> [[Tiddlyhost.com|https://tiddlyhost.com/]] is a hosting service for TiddlyWiki created by Simon Baird. Once you sign up and confirm your email you can create "sites", (i.e. ~TiddlyWikis), with support for online saving. Sites can be private or public, and you can optionally list them on the taggable and searchable [[Tiddlyhost Hub|https://tiddlyhost.com/hub]] where they'll be discoverable by others. Unlike [[TiddlySpot|Saving on TiddlySpot]], [[Tiddlyhost|https://tiddlyhost.com]] is secure, open source, and has proper support for TiddlyWiki5. It also allows uploading existing ~TiddlyWiki files, supports TiddlyWikiClassic, and lets you claim ownership of your ~TiddlySpot sites. For more information see the [[FAQ|https://github.com/simonbaird/tiddlyhost/wiki/FAQ]] and the [[About|https://tiddlyhost.com/about]] page. - -<div style="clear: both;"/> \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/definitions/Xememex.tid b/editions/tw5.com/tiddlers/definitions/Xememex.tid index e69c17e8b..8f3fc1dd6 100644 --- a/editions/tw5.com/tiddlers/definitions/Xememex.tid +++ b/editions/tw5.com/tiddlers/definitions/Xememex.tid @@ -1,7 +1,8 @@ -title: Xememex -tags: Definitions created: 20230410105035569 modified: 20230410105035569 +tags: Definitions +title: Xememex +type: text/vnd.tiddlywiki <span style="float:right;">[img width=340 [Xememex Logo]]</span> @@ -10,5 +11,3 @@ Xememex is a multiuser TiddlyWiki from [[Intertwingled Innovations]]. It allows The largest customer implementation has hundreds of online wikis with thousands of users. See https://manuals.annafreud.org/ Xememex is currently only available under commercial terms from Intertwingled Innovations. Contact [[Jeremy Ruston at Intertwingled Innovations|mailto:jeremy@intertwingledinnovations.com]] for more details. - -<div style="clear: both;"/> \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/wikitext/Utility Classes.tid b/editions/tw5.com/tiddlers/wikitext/Utility Classes.tid index 4a291e34b..b61246960 100644 --- a/editions/tw5.com/tiddlers/wikitext/Utility Classes.tid +++ b/editions/tw5.com/tiddlers/wikitext/Utility Classes.tid @@ -13,7 +13,7 @@ type: text/vnd.tiddlywiki |`tc-max-width-80`|Sets the width of a block-element to use 80% of the maximum container width. This setting is useful with the `tc-center` class | |`tc-edit-max-width `|Expands [[TextWidget]]s to use the maximum available width. See [[ControlPanel -> Info -> Basics|$:/core/ui/ControlPanel/Basics]]| |`tc-first-link-nowrap` |Ensures that any links in the first table column will never wrap to the next line | - +|`tc-clearfix`|<<.from-version "5.3.6">> This class can be used to prevent elements, that have a `class="tc-float-right"` from overflowing their container elements. tc-clearfix is already assigned to all major ViewTemplate and EditTemplate elements. So it only needs to be used where the default does not work out of the box.| !! Table Utility Classes |`tc-table-no-border` |Removes the borders of a table | diff --git a/plugins/tiddlywiki/blog/templates/tiddler.tid b/plugins/tiddlywiki/blog/templates/tiddler.tid index 32e625861..074e89c22 100644 --- a/plugins/tiddlywiki/blog/templates/tiddler.tid +++ b/plugins/tiddlywiki/blog/templates/tiddler.tid @@ -1,8 +1,8 @@ title: $:/plugins/tiddlywiki/blog/templates/tiddler -<div class="tc-tiddler-frame tc-tiddler-view-frame"> +<div class="tc-tiddler-frame tc-tiddler-view-frame tc-clearfix"> -<div class="tc-tiddler-title"> +<div class="tc-tiddler-title tc-clearfix"> <div class="tc-titlebar"> diff --git a/plugins/tiddlywiki/tour/simplified-tiddler-with-tags.tid b/plugins/tiddlywiki/tour/simplified-tiddler-with-tags.tid index 9adf981e1..c2c14a7b0 100644 --- a/plugins/tiddlywiki/tour/simplified-tiddler-with-tags.tid +++ b/plugins/tiddlywiki/tour/simplified-tiddler-with-tags.tid @@ -81,8 +81,8 @@ color:$(foregroundColor)$; \end <$let storyTiddler=<<currentTiddler>>> - <div class="tc-tiddler-frame tc-tiddler-view-frame tc-tiddler-exists tc-tiddler-shadow " role="article"> - <div class="tc-tiddler-title"> + <div class="tc-tiddler-frame tc-tiddler-view-frame tc-tiddler-exists tc-tiddler-shadow tc-clearfix" role="article"> + <div class="tc-tiddler-title tc-clearfix"> <div class="tc-titlebar"> <span class="tc-tiddler-controls"> <$list filter="[<tour-simplified-tiddler-close-button>match[yes]]" variable="ignore"> @@ -94,12 +94,12 @@ color:$(foregroundColor)$; </span> </div> </div> - <div class="tc-tags-wrapper"> + <div class="tc-tags-wrapper tc-clearfix"> <$list filter="[all[current]tags[]sort[title]]" storyview="pop"> <<simplified-tag "$:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/tiddlers/">> </$list> </div> - <div class="tc-tiddler-body"> + <div class="tc-tiddler-body tc-clearfix"> <$transclude field="text" mode="block"/> </div> </div> diff --git a/plugins/tiddlywiki/tour/simplified-tiddler.tid b/plugins/tiddlywiki/tour/simplified-tiddler.tid index 22a146b9a..302903bee 100644 --- a/plugins/tiddlywiki/tour/simplified-tiddler.tid +++ b/plugins/tiddlywiki/tour/simplified-tiddler.tid @@ -3,7 +3,7 @@ title: $:/plugins/tiddlywiki/tour/simplified-tiddler \whitespace trim <$let storyTiddler=<<currentTiddler>>> <div class="tc-tiddler-frame tc-tiddler-view-frame tc-tiddler-exists tc-tiddler-shadow " role="article"> - <div class="tc-tiddler-title"> + <div class="tc-tiddler-title tc-clearfix"> <div class="tc-titlebar"> <span class="tc-tiddler-controls"> <$list filter="[<tour-simplified-tiddler-close-button>match[yes]]" variable="ignore"> @@ -15,7 +15,7 @@ title: $:/plugins/tiddlywiki/tour/simplified-tiddler </span> </div> </div> - <div class="tc-tiddler-body"> + <div class="tc-tiddler-body tc-clearfix"> <$transclude field="text" mode="block"/> </div> </div> diff --git a/themes/tiddlywiki/vanilla/base.tid b/themes/tiddlywiki/vanilla/base.tid index ff64ea23e..65c1a5fe3 100644 --- a/themes/tiddlywiki/vanilla/base.tid +++ b/themes/tiddlywiki/vanilla/base.tid @@ -1350,10 +1350,6 @@ canvas.tc-edit-bitmapeditor { display: block; } -.tc-tiddler-body { - clear: both; -} - .tc-single-tiddler-window .tc-tiddler-body, .tc-tiddler-frame .tc-tiddler-body { font-size: {{$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize}}; @@ -2773,6 +2769,16 @@ a.tc-tiddlylink.tc-plugin-info:hover > .tc-plugin-info-chunk .tc-plugin-info-sta float: right; } +/* Float tc-clearfix. Needs to be used by elements that allow float:right in their content. +** So the floating element does not overflow +*/ + +.tc-clearfix:after { + content: ""; + clear: both; + display: table; +} + /* ** Chooser */ @@ -3524,3 +3530,4 @@ span.tc-translink > a:first-child { .tc-tiny-v-gap-bottom { margin-bottom: 3px; } + From 8a8dcf82553fbf5aa0aad8bf24705ac9e7b33553 Mon Sep 17 00:00:00 2001 From: Mario Pietsch <pmariojo@gmail.com> Date: Tue, 10 Sep 2024 11:49:41 +0200 Subject: [PATCH 27/82] Add startCount to unusedtitle macro, new tests, new docs (#7941) * add startCount to unusedtitle macro, new tests, new docs * rename test files * update .from-version in docs --- core/modules/macros/unusedtitle.js | 10 ++++--- core/modules/utils/utils.js | 6 +++-- core/modules/wiki.js | 16 +++++++---- .../data/macros/unusedtitle/basic-params.tid | 10 ++++++- .../unusedtitle/template-startCount.tid | 27 +++++++++++++++++++ .../data/macros/unusedtitle/template.tid | 2 +- .../tiddlers/macros/UnusedTitleMacro.tid | 7 +++-- .../unusedtitle Macro (Examples 1).tid | 16 ++++++++++- .../tiddlers/macros/examples/unusedtitle.tid | 5 ++-- 9 files changed, 81 insertions(+), 18 deletions(-) create mode 100644 editions/test/tiddlers/tests/data/macros/unusedtitle/template-startCount.tid diff --git a/core/modules/macros/unusedtitle.js b/core/modules/macros/unusedtitle.js index 952bd0264..8a61c425e 100644 --- a/core/modules/macros/unusedtitle.js +++ b/core/modules/macros/unusedtitle.js @@ -16,20 +16,22 @@ exports.name = "unusedtitle"; exports.params = [ {name: "baseName"}, {name: "separator"}, - {name: "template"} + {name: "template"}, + {name: "startCount"} ]; /* Run the macro */ -exports.run = function(baseName,separator,template) { +exports.run = function(baseName,separator,template,startCount) { separator = separator || " "; + startCount = startCount || 0; if(!baseName) { baseName = $tw.language.getString("DefaultNewTiddlerTitle"); } // $tw.wiki.generateNewTitle = function(baseTitle,options) - // options.prefix must be a string! - return this.wiki.generateNewTitle(baseName, {"prefix": separator, "template": template}); + // options.prefix must be a string! + return this.wiki.generateNewTitle(baseName, {"prefix": separator, "template": template, "startCount": startCount}); }; })(); diff --git a/core/modules/utils/utils.js b/core/modules/utils/utils.js index 878f83fbb..234de0c75 100644 --- a/core/modules/utils/utils.js +++ b/core/modules/utils/utils.js @@ -330,16 +330,18 @@ exports.formatTitleString = function(template,options) { }] ]; while(t.length){ - var matchString = ""; + var matchString = "", + found = false; $tw.utils.each(matches, function(m) { var match = m[0].exec(t); if(match) { + found = true; matchString = m[1].call(null,match); t = t.substr(match[0].length); return false; } }); - if(matchString) { + if(found) { result += matchString; } else { result += t.charAt(0); diff --git a/core/modules/wiki.js b/core/modules/wiki.js index 5673c9e3b..29a839c7a 100755 --- a/core/modules/wiki.js +++ b/core/modules/wiki.js @@ -194,18 +194,24 @@ options.prefix must be a string */ exports.generateNewTitle = function(baseTitle,options) { options = options || {}; - var c = 0, - title = baseTitle, - template = options.template, + var title = baseTitle, + template = options.template || "", + // test if .startCount is a positive integer. If not set to 0 + c = (parseInt(options.startCount,10) > 0) ? parseInt(options.startCount,10) : 0, prefix = (typeof(options.prefix) === "string") ? options.prefix : " "; + if (template) { // "count" is important to avoid an endless loop in while(...)!! template = (/\$count:?(\d+)?\$/i.test(template)) ? template : template + "$count$"; - title = $tw.utils.formatTitleString(template,{"base":baseTitle,"separator":prefix,"counter":c}); + // .formatTitleString() expects strings as input + title = $tw.utils.formatTitleString(template,{"base":baseTitle,"separator":prefix,"counter":c+""}); while(this.tiddlerExists(title) || this.isShadowTiddler(title) || this.findDraft(title)) { - title = $tw.utils.formatTitleString(template,{"base":baseTitle,"separator":prefix,"counter":(++c)}); + title = $tw.utils.formatTitleString(template,{"base":baseTitle,"separator":prefix,"counter":(++c)+""}); } } else { + if (c > 0) { + title = baseTitle + prefix + c; + } while(this.tiddlerExists(title) || this.isShadowTiddler(title) || this.findDraft(title)) { title = baseTitle + prefix + (++c); } diff --git a/editions/test/tiddlers/tests/data/macros/unusedtitle/basic-params.tid b/editions/test/tiddlers/tests/data/macros/unusedtitle/basic-params.tid index 5e1ae482d..c0ec65ec0 100644 --- a/editions/test/tiddlers/tests/data/macros/unusedtitle/basic-params.tid +++ b/editions/test/tiddlers/tests/data/macros/unusedtitle/basic-params.tid @@ -14,7 +14,15 @@ title: Output <<unusedtitle baseName:"About" separator:"-">> +<!-- v5.3.6 startCount --> + +<<unusedtitle startCount:"3">> + +<<unusedtitle startCount:"-1" baseName:"invalid start">> + +<<unusedtitle startCount:"aaa" baseName:"invalid count">> + + title: ExpectedResult -<p>New Tiddler</p><p>New Tiddler</p><p>anotherBase</p><p>About</p> \ No newline at end of file +<p>New Tiddler</p><p>New Tiddler</p><p>anotherBase</p><p>About</p><p>New Tiddler 3</p><p>invalid start</p><p>invalid count</p> \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/macros/unusedtitle/template-startCount.tid b/editions/test/tiddlers/tests/data/macros/unusedtitle/template-startCount.tid new file mode 100644 index 000000000..83fc1686b --- /dev/null +++ b/editions/test/tiddlers/tests/data/macros/unusedtitle/template-startCount.tid @@ -0,0 +1,27 @@ +title: Macros/unusedtitle/template-startCount +description: test <<unusedtitle>> with templates and startCount +type: text/vnd.tiddlywiki-multiple +tags: [[$:/tags/wiki-test-spec]] + +title: Output + +<!-- test template basics --> + +<<unusedtitle template:"$basename$$separator$$count$xx" >> + +<<unusedtitle template:"$basename$$separator$$count$xx" startCount:"4" >> + +<<unusedtitle template:"$basename$$separator$$count:1$xx" startCount:"11">> + +<!-- test parameter edgecases --> + +<<unusedtitle template:"$basename$$separator$$count:2$xx" startCount:"" baseName:"emptyCount">> + +<<unusedtitle template:"$basename$$separator$$count$xx" startCount:"-1" separator:"" baseName:"invalid start" >> + +<<unusedtitle template:"$basename$$separator$$count$xx" startCount:"bbb" separator:"" baseName:"invalid count" >> + ++ +title: ExpectedResult + +<p>New Tiddler 0xx</p><p>New Tiddler 4xx</p><p>New Tiddler 11xx</p><p>emptyCount 00xx</p><p>invalid start 0xx</p><p>invalid count 0xx</p> \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/macros/unusedtitle/template.tid b/editions/test/tiddlers/tests/data/macros/unusedtitle/template.tid index 66bd0f763..183ad42da 100644 --- a/editions/test/tiddlers/tests/data/macros/unusedtitle/template.tid +++ b/editions/test/tiddlers/tests/data/macros/unusedtitle/template.tid @@ -25,4 +25,4 @@ title: Output + title: ExpectedResult -<p>New Tiddler</p><p>count-missing</p><p>00-new</p><p>00-base</p><p>00-New Tiddler</p><p>00-asdf</p><p>00 asdf</p> \ No newline at end of file +<p>New Tiddler</p><p>count-missing0</p><p>00-new</p><p>00-base</p><p>00-New Tiddler</p><p>00-asdf</p><p>00 asdf</p> \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/macros/UnusedTitleMacro.tid b/editions/tw5.com/tiddlers/macros/UnusedTitleMacro.tid index e0cc00433..b39bb5eb1 100644 --- a/editions/tw5.com/tiddlers/macros/UnusedTitleMacro.tid +++ b/editions/tw5.com/tiddlers/macros/UnusedTitleMacro.tid @@ -1,6 +1,6 @@ caption: unusedtitle created: 20210104143546885 -modified: 20210427184035684 +modified: 20240119224103283 tags: Macros [[Core Macros]] title: unusedtitle Macro type: text/vnd.tiddlywiki @@ -18,7 +18,10 @@ It uses the same method as the create new tiddler button, a number is appended t : <<.from-version "5.2.0">> An ''optional'' string specifying the separator between baseName and the unique number. eg: `separator:"-"`. Defaults to a space: `" "`. If you need an empty separator use the ''template''! ; template -: <<.from-version "5.2.0">> A ''optional'' template string can be used to allow you maximum flexibility. If the template string is used, there will always be a counter value. +: <<.from-version "5.2.0">> An ''optional'' template string can be used to allow you maximum flexibility. If the template string is used, there will always be a counter value. + +; startCount +: <<.from-version "5.3.6">> An ''optional'' parameter, that sets the initial value for the new tiddler counter. !! Template String diff --git a/editions/tw5.com/tiddlers/macros/examples/unusedtitle Macro (Examples 1).tid b/editions/tw5.com/tiddlers/macros/examples/unusedtitle Macro (Examples 1).tid index 22ece3997..3853299bf 100644 --- a/editions/tw5.com/tiddlers/macros/examples/unusedtitle Macro (Examples 1).tid +++ b/editions/tw5.com/tiddlers/macros/examples/unusedtitle Macro (Examples 1).tid @@ -1,5 +1,5 @@ created: 20210227212730299 -modified: 20211118025545823 +modified: 20240119151636562 tags: [[Macro Examples]] title: unusedtitle Macro (Examples 1) type: text/vnd.tiddlywiki @@ -16,6 +16,10 @@ type: text/vnd.tiddlywiki <$action-sendmessage $message="tm-new-tiddler" title=<<unusedtitle baseName:"new" template:"$count:2$-$basename$">> /> \end +\define testStartCount() +<$action-createtiddler $basetitle=<<unusedtitle startCount:"10" baseName:"new" separator:"-" template:"$count:2$$separator$$basename$">>/> +\end + ``` <<unusedtitle template:"$count:2$-new">> ``` @@ -43,6 +47,16 @@ New Tiddler Create Tiddler </$button> + +``` +<<unusedtitle startCount:"10" baseName:"new" separator:"-" template:"$count:2$$separator$$basename$">> +``` + +<$button actions=<<testStartCount>>> +<$action-setfield $tiddler="$:/state/tab/sidebar--595412856" text="$:/core/ui/SideBar/Recent"/> +Create Tiddler +</$button> + --- <details> diff --git a/editions/tw5.com/tiddlers/macros/examples/unusedtitle.tid b/editions/tw5.com/tiddlers/macros/examples/unusedtitle.tid index a86f0d16e..fc9ed29ed 100644 --- a/editions/tw5.com/tiddlers/macros/examples/unusedtitle.tid +++ b/editions/tw5.com/tiddlers/macros/examples/unusedtitle.tid @@ -1,5 +1,5 @@ created: 20210104143940715 -modified: 20210228141241657 +modified: 20240119150720917 tags: [[unusedtitle Macro]] [[Macro Examples]] title: unusedtitle Macro (Examples) type: text/vnd.tiddlywiki @@ -9,7 +9,8 @@ type: text/vnd.tiddlywiki <$macrocall $name=".example" n="2" eg="""<<unusedtitle separator:"-">>"""/> <$macrocall $name=".example" n="3" eg="""<<unusedtitle baseName:"anotherBase">>"""/> <$macrocall $name=".example" n="4" eg="""<<unusedtitle baseName:"About" separator:"-">>"""/> -<$macrocall $name=".example" n="5" eg="""<<unusedtitle template:"$count:2$-test">>"""/> +<$macrocall $name=".example" n="5" eg="""<<unusedtitle baseName:"Count" startCount:"3">>"""/> +<$macrocall $name=".example" n="6" eg="""<<unusedtitle template:"$count:2$-test">>"""/> --- From 3434884ea46349f32c8c42362c191dbf79c29180 Mon Sep 17 00:00:00 2001 From: Leilei332 <LeiYiXia29@outlook.com> Date: Tue, 10 Sep 2024 18:13:00 +0800 Subject: [PATCH 28/82] Add a settings page for markdown plugin (#8585) * Add a settings page for markdown plugin * Add link to $:/config/markdown/renderWikiText * Place "Quotes replacement" settings after "Typographer" * Add link to plugin itself & remove transclusion in config tab The transclusion to $:/plugins/tiddlywiki/markdown/settings in config tab is removed to avoid confusion * Add settings tab in plugin info --- plugins/tiddlywiki/markdown/config.tid | 10 ---------- plugins/tiddlywiki/markdown/plugin.info | 2 +- plugins/tiddlywiki/markdown/settings.tid | 19 +++++++++++++++++++ .../tiddlywiki/markdown/settings/breaks.tid | 9 +++++++++ .../tiddlywiki/markdown/settings/linkify.tid | 9 +++++++++ .../tiddlywiki/markdown/settings/quotes.tid | 8 ++++++++ .../markdown/settings/renderWikiText.tid | 9 +++++++++ .../settings/renderWikiTextPragma.tid | 7 +++++++ .../markdown/settings/typographer.tid | 9 +++++++++ 9 files changed, 71 insertions(+), 11 deletions(-) create mode 100644 plugins/tiddlywiki/markdown/settings.tid create mode 100644 plugins/tiddlywiki/markdown/settings/breaks.tid create mode 100644 plugins/tiddlywiki/markdown/settings/linkify.tid create mode 100644 plugins/tiddlywiki/markdown/settings/quotes.tid create mode 100644 plugins/tiddlywiki/markdown/settings/renderWikiText.tid create mode 100644 plugins/tiddlywiki/markdown/settings/renderWikiTextPragma.tid create mode 100644 plugins/tiddlywiki/markdown/settings/typographer.tid diff --git a/plugins/tiddlywiki/markdown/config.tid b/plugins/tiddlywiki/markdown/config.tid index c3fb14c0d..1438d3fa6 100755 --- a/plugins/tiddlywiki/markdown/config.tid +++ b/plugins/tiddlywiki/markdown/config.tid @@ -2,16 +2,6 @@ title: $:/plugins/tiddlywiki/markdown/config ! Plugin Configuration -|!Config |!Default |!Description | -|[[breaks|$:/config/markdown/breaks]]|`false`|markdown-it library config: Convert '\n' in paragraphs into `<br>` | -|[[linkify|$:/config/markdown/linkify]]|`false`|markdown-it library config: Autoconvert URL-like text to links | -|[[renderWikiText|$:/config/markdown/renderWikiText]]|`true`|After Markdown is parsed, should any text elements be handed off to the ~WikiText parser for further processing? | -|[[renderWikiTextPragma|$:/config/markdown/renderWikiTextPragma]]|<code><$view tiddler="$:/plugins/tiddlywiki/markdown" subtiddler="$:/config/markdown/renderWikiTextPragma" mode="inline"/></code>|When handing off to the ~WikiText parser, what parser rules should it follow? | -|[[typographer|$:/config/markdown/typographer]]|`false`|markdown-it library config: Enable some language-neutral replacement + quotes beautification | -|[[quotes|$:/config/markdown/quotes]]|`“”‘’`|markdown-it library config: Double + single quotes replacement pairs, when `typographer` is enabled | - -''IMPORTANT:'' You must reload your wiki for changes to take effect. - <h2 style="margin-top:1.5em">~WikiText Pragma</h2> The value of [[renderWikiTextPragma|$:/config/markdown/renderWikiTextPragma]] has been carefully tuned to properly integrate markdown with ~TiddlyWiki. Changing this setting may produce unexpected results, but the inclusion of the following parser rules should be fine: diff --git a/plugins/tiddlywiki/markdown/plugin.info b/plugins/tiddlywiki/markdown/plugin.info index cf5ecea3a..1288ad068 100755 --- a/plugins/tiddlywiki/markdown/plugin.info +++ b/plugins/tiddlywiki/markdown/plugin.info @@ -2,6 +2,6 @@ "title": "$:/plugins/tiddlywiki/markdown", "name": "Markdown", "description": "Markdown parser based on markdown-it", - "list": "readme config syntax license", + "list": "readme config settings syntax license", "stability": "STABILITY_2_STABLE" } diff --git a/plugins/tiddlywiki/markdown/settings.tid b/plugins/tiddlywiki/markdown/settings.tid new file mode 100644 index 000000000..54207fa10 --- /dev/null +++ b/plugins/tiddlywiki/markdown/settings.tid @@ -0,0 +1,19 @@ +title: $:/plugins/tiddlywiki/markdown/settings +tags: $:/tags/ControlPanel/SettingsTab +caption: Markdown + +These settings let you customise the behaviour of Markdown. See [[plugin|$:/plugins/tiddlywiki/markdown]] readme and config tab for more information. + +''IMPORTANT:'' You must reload your wiki for changes to take effect. + +<$list filter="[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Settings/Markdown]]"> + +<div class="tc-control-panel-setting" data-setting-title=<<currentTiddler>> > + +!!.tc-control-panel-accent <$link><$transclude field="caption"/></$link> + +<$transclude/> + +</div> + +</$list> \ No newline at end of file diff --git a/plugins/tiddlywiki/markdown/settings/breaks.tid b/plugins/tiddlywiki/markdown/settings/breaks.tid new file mode 100644 index 000000000..95ebc47a8 --- /dev/null +++ b/plugins/tiddlywiki/markdown/settings/breaks.tid @@ -0,0 +1,9 @@ +title: $:/plugins/tiddlywiki/markdown/settings/breaks +tags: $:/tags/ControlPanel/Settings/Markdown +caption: Breaks + +markdown-it library config: Convert `\n` in paragraphs into `<br>` + +<$checkbox tiddler="$:/config/markdown/breaks" field="text" checked="true" unchecked="false"> + [[Breaks|$:/config/markdown/breaks]] +</$checkbox> \ No newline at end of file diff --git a/plugins/tiddlywiki/markdown/settings/linkify.tid b/plugins/tiddlywiki/markdown/settings/linkify.tid new file mode 100644 index 000000000..c43928ccf --- /dev/null +++ b/plugins/tiddlywiki/markdown/settings/linkify.tid @@ -0,0 +1,9 @@ +title: $:/plugins/tiddlywiki/markdown/settings/linkify +tags: $:/tags/ControlPanel/Settings/Markdown +caption: Linkify + +markdown-it library config: Autoconvert URL-like text to links + +<$checkbox tiddler="$:/config/markdown/linkify" field="text" checked="true" unchecked="false"> + [[Linkify|$:/config/markdown/linkify]] +</$checkbox> \ No newline at end of file diff --git a/plugins/tiddlywiki/markdown/settings/quotes.tid b/plugins/tiddlywiki/markdown/settings/quotes.tid new file mode 100644 index 000000000..b4247ede6 --- /dev/null +++ b/plugins/tiddlywiki/markdown/settings/quotes.tid @@ -0,0 +1,8 @@ +title: $:/plugins/tiddlywiki/markdown/settings/quotes +tags: $:/tags/ControlPanel/Settings/Markdown +caption: Quotes replacement +list-after: $:/plugins/tiddlywiki/markdown/settings/typographer + +markdown-it library config: Double + single quotes replacement pairs, when [[typographer|$:/config/markdown/typographer]] is enabled. + +|[[Quotes replacement|$:/config/markdown/quotes]]|<$edit-text tiddler="$:/config/markdown/quotes" tag="input"/> | \ No newline at end of file diff --git a/plugins/tiddlywiki/markdown/settings/renderWikiText.tid b/plugins/tiddlywiki/markdown/settings/renderWikiText.tid new file mode 100644 index 000000000..9b2073c10 --- /dev/null +++ b/plugins/tiddlywiki/markdown/settings/renderWikiText.tid @@ -0,0 +1,9 @@ +title: $:/plugins/tiddlywiki/markdown/settings/renderWikiText +tags: $:/tags/ControlPanel/Settings/Markdown +caption: Enable WikiText + +After Markdown is parsed, should any text elements be handed off to the ~WikiText parser for further processing? + +<$checkbox tiddler="$:/config/markdown/renderWikiText" field="text" checked="true" unchecked="false"> + [[Enable WikiText|$:/config/markdown/renderWikiText]] +</$checkbox> \ No newline at end of file diff --git a/plugins/tiddlywiki/markdown/settings/renderWikiTextPragma.tid b/plugins/tiddlywiki/markdown/settings/renderWikiTextPragma.tid new file mode 100644 index 000000000..12b4ceefb --- /dev/null +++ b/plugins/tiddlywiki/markdown/settings/renderWikiTextPragma.tid @@ -0,0 +1,7 @@ +title: $:/plugins/tiddlywiki/markdown/settings/renderWikiTextPragma +tags: $:/tags/ControlPanel/Settings/Markdown +caption: Enabled WikiText parser rules + +When handing off to the ~WikiText parser, what parser rules should it follow? + +|[[Enabled WikiText parser rules|$:/config/markdown/renderWikiTextPragma]]|<$edit tiddler="$:/config/markdown/renderWikiTextPragma" class="tc-edit-texteditor" autoHeight="yes"/> | \ No newline at end of file diff --git a/plugins/tiddlywiki/markdown/settings/typographer.tid b/plugins/tiddlywiki/markdown/settings/typographer.tid new file mode 100644 index 000000000..5b9153dae --- /dev/null +++ b/plugins/tiddlywiki/markdown/settings/typographer.tid @@ -0,0 +1,9 @@ +title: $:/plugins/tiddlywiki/markdown/settings/typographer +tags: $:/tags/ControlPanel/Settings/Markdown +caption: Typographer + +markdown-it library config: Enable some language-neutral replacement + quotes beautification + +<$checkbox tiddler="$:/config/markdown/typographer" field="text" checked="true" unchecked="false"> + [[Typographer|$:/config/markdown/typographer]] +</$checkbox> \ No newline at end of file From 93543ba213d322e037303424f1a41cbe406802af Mon Sep 17 00:00:00 2001 From: Leilei332 <LeiYiXia29@outlook.com> Date: Tue, 10 Sep 2024 18:33:28 +0800 Subject: [PATCH 29/82] Add documention for $:/tags/ControlPanel/SettingsTab (#8512) * Add documention for $:/tags/ControlPanel/SettingsTab * Fix tag name --- .../SystemTag_ $__tags_ControlPanel_SettingsTab.tid | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 editions/tw5.com/tiddlers/systemtags/SystemTag_ $__tags_ControlPanel_SettingsTab.tid diff --git a/editions/tw5.com/tiddlers/systemtags/SystemTag_ $__tags_ControlPanel_SettingsTab.tid b/editions/tw5.com/tiddlers/systemtags/SystemTag_ $__tags_ControlPanel_SettingsTab.tid new file mode 100644 index 000000000..2f08ea686 --- /dev/null +++ b/editions/tw5.com/tiddlers/systemtags/SystemTag_ $__tags_ControlPanel_SettingsTab.tid @@ -0,0 +1,9 @@ +caption: $:/tags/ControlPanel/SettingsTab +created: 20240813060717747 +description: marks elements to be placed under "Settings" tab in Control Panel +modified: 20240813060843043 +tags: SystemTags +title: SystemTag: $:/tags/ControlPanel/SettingsTab +type: text/vnd.tiddlywiki + +The [[system tag|SystemTags]] `$:/tags/ControlPanel/SettingsTab` marks elements to be placed under "Settings" tab in [[$:/ControlPanel]] \ No newline at end of file From 813a574921765bafe0f81cc0ecc6e080c9d84ac3 Mon Sep 17 00:00:00 2001 From: Mohammad Rahmani <830394+kookma@users.noreply.github.com> Date: Tue, 10 Sep 2024 14:05:05 +0330 Subject: [PATCH 30/82] Docs: list operator "Index" instead of "Property" (#8509) --- editions/tw5.com/tiddlers/filters/list.tid | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/editions/tw5.com/tiddlers/filters/list.tid b/editions/tw5.com/tiddlers/filters/list.tid index be3908b86..8df76103c 100644 --- a/editions/tw5.com/tiddlers/filters/list.tid +++ b/editions/tw5.com/tiddlers/filters/list.tid @@ -1,16 +1,16 @@ +caption: list created: 20140410103123179 -modified: 20211115092315020 +modified: 20240811083650364 +op-input: ignored +op-neg-input: a [[selection of titles|Title Selection]] +op-neg-output: those input titles that are <<.em not>> mentioned at <<.place R>> +op-output: the titles stored as a [[title list|Title List]] at <<.place R>> +op-parameter: a [[reference|TextReference]] to a [[field|TiddlerFields]] or [[index|DataTiddlers]] of a particular tiddler +op-parameter-name: R +op-purpose: select titles via a list field tags: [[Filter Operators]] [[Field Operators]] [[Selection Constructors]] [[Negatable Operators]] title: list Operator type: text/vnd.tiddlywiki -caption: list -op-purpose: select titles via a list field -op-input: ignored -op-neg-input: a [[selection of titles|Title Selection]] -op-parameter: a [[reference|TextReference]] to a [[field|TiddlerFields]] or [[property|DataTiddlers]] of a particular tiddler -op-parameter-name: R -op-output: the titles stored as a [[title list|Title List]] at <<.place R>> -op-neg-output: those input titles that are <<.em not>> mentioned at <<.place R>> <<.place R>> can reference either a field or a property. See [[TextReference]] for the syntax. From 8d9407aad7bb2896c090f03494d3ad539c97dd13 Mon Sep 17 00:00:00 2001 From: Aza K9 <58900639+wolfsprite@users.noreply.github.com> Date: Tue, 10 Sep 2024 10:36:34 +0000 Subject: [PATCH 31/82] Signing CLA (#8502) Co-authored-by: Jeremy Ruston <jeremy@jermolene.com> --- licenses/cla-individual.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/licenses/cla-individual.md b/licenses/cla-individual.md index a77287f1d..ecabb96fd 100644 --- a/licenses/cla-individual.md +++ b/licenses/cla-individual.md @@ -586,4 +586,6 @@ Michael McDermott, @michaeljmcd, 2024-07-09 Val Packett, @valpackett, 2024/07/26 -@JDIGIO0213, 2024/08/29 \ No newline at end of file +@wolfsprite, 2024/08/09 + +@JDIGIO0213, 2024/08/29 From 30bb563ffe33373ea3367a18c388f239e5a0e240 Mon Sep 17 00:00:00 2001 From: Aza K9 <58900639+wolfsprite@users.noreply.github.com> Date: Tue, 10 Sep 2024 10:37:03 +0000 Subject: [PATCH 32/82] Fix Issue With Highlight.js Demo Link (#8503) --- editions/tw5.com/tiddlers/widgets/CodeblockWidget.tid | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/editions/tw5.com/tiddlers/widgets/CodeblockWidget.tid b/editions/tw5.com/tiddlers/widgets/CodeblockWidget.tid index acdab9ef9..e6e7bd166 100644 --- a/editions/tw5.com/tiddlers/widgets/CodeblockWidget.tid +++ b/editions/tw5.com/tiddlers/widgets/CodeblockWidget.tid @@ -1,6 +1,6 @@ caption: codeblock created: 20151103160200000 -modified: 20160817175325205 +modified: 20240809074611002 tags: Widgets title: CodeBlockWidget type: text/vnd.tiddlywiki @@ -22,7 +22,7 @@ The content of the `<$codeblock>` widget is ignored. The `language` attribute accepts either: -* a Highlight.js language code (see https://highlightjs.org/static/demo/ for a list) +* a Highlight.js language code (see https://highlightjs.org/demo for a list) * a MIME type (eg, `text/html` or `image/svg+xml`) ! Examples From 19336dc4375b5a6b9e39f063413e6ee505b228de Mon Sep 17 00:00:00 2001 From: lin onetwo <linonetwo012@gmail.com> Date: Tue, 10 Sep 2024 18:39:50 +0800 Subject: [PATCH 33/82] Update Alternative page layouts.tid (#8461) --- .../tiddlers/customising/Alternative page layouts.tid | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/editions/tw5.com/tiddlers/customising/Alternative page layouts.tid b/editions/tw5.com/tiddlers/customising/Alternative page layouts.tid index 071d00dbd..eb1afd2b7 100644 --- a/editions/tw5.com/tiddlers/customising/Alternative page layouts.tid +++ b/editions/tw5.com/tiddlers/customising/Alternative page layouts.tid @@ -1,5 +1,5 @@ created: 20201123172925848 -modified: 20240627060629394 +modified: 20240801020629394 tags: [[Customise TiddlyWiki]] title: Alternative page layouts type: text/vnd.tiddlywiki @@ -23,9 +23,8 @@ This alternative page template can either be a tweaked and modified version of t tc-page-container tc-language-$(languageTitle)$ your-plugin-name-container \end \procedure redirected-navigate-actions() - <$action-setfield $tiddler="$:/layout" text="" $timestamp="no"> - <$action-navigate $to=<<event-navigateTo>> $scroll="yes" /> - </$action-setfield> + <$action-setfield $tiddler="$:/layout" text="" $timestamp="no" /> + <$action-navigate $to=<<event-navigateTo>> $scroll="yes" /> \end <$navigator story="$:/StoryList" history="$:/HistoryList" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}> From feec6ef18fd44498ae87af99e217aafb54f10c77 Mon Sep 17 00:00:00 2001 From: btheado <brian.theado@gmail.com> Date: Tue, 10 Sep 2024 06:48:14 -0400 Subject: [PATCH 34/82] Use testcase tiddlers for html examples (#8376) * Convert several html examples into testcase tiddlers * Convert html table exmaple into testcase tiddler --- .../testcases/HTML/BlockModeInHTMLTable.tid | 30 +++++++++++++ .../testcases/HTML/OpenTagBlankLine.tid | 23 ++++++++++ .../HTML/OpenTagBlankLineInBoldSyntax.tid | 22 +++++++++ .../HTML/OpenTagBlankLineInTableSyntax.tid | 22 +++++++++ .../testcases/HTML/OpenTagNoBlankLine.tid | 34 ++++++++++++++ .../WikiText parser mode_ HTML examples.tid | 45 +++---------------- 6 files changed, 137 insertions(+), 39 deletions(-) create mode 100644 editions/tw5.com/tiddlers/testcases/HTML/BlockModeInHTMLTable.tid create mode 100644 editions/tw5.com/tiddlers/testcases/HTML/OpenTagBlankLine.tid create mode 100644 editions/tw5.com/tiddlers/testcases/HTML/OpenTagBlankLineInBoldSyntax.tid create mode 100644 editions/tw5.com/tiddlers/testcases/HTML/OpenTagBlankLineInTableSyntax.tid create mode 100644 editions/tw5.com/tiddlers/testcases/HTML/OpenTagNoBlankLine.tid diff --git a/editions/tw5.com/tiddlers/testcases/HTML/BlockModeInHTMLTable.tid b/editions/tw5.com/tiddlers/testcases/HTML/BlockModeInHTMLTable.tid new file mode 100644 index 000000000..f7050de7d --- /dev/null +++ b/editions/tw5.com/tiddlers/testcases/HTML/BlockModeInHTMLTable.tid @@ -0,0 +1,30 @@ +created: 20240713164810184 +description: Block mode for table cells +modified: 20240713164810184 +tags: $:/tags/wiki-test-spec +title: TestCases/HTML/BlockModeInHTMLTable +type: text/vnd.tiddlywiki-multiple + +title: Narrative + +Unlike the table wiki syntax, the less convenient `<table>`, `<tr>`, `<td>` html tags can use a blank line +to get block mode punctuation regognised inside of table cells. ++ +title: Output + +<table> +<tr><td> + +* list item one +* list item two +</td><td> + +|nested|table| +</td></tr> +</table> ++ +title: ExpectedResult + +<p><table> +<tr><td><ul><li>list item one</li><li>list item two</li></ul></td><td><table><tbody><tr class="evenRow"><td>nested</td><td>table</td></tr></tbody></table></td></tr> +</table></p> \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/testcases/HTML/OpenTagBlankLine.tid b/editions/tw5.com/tiddlers/testcases/HTML/OpenTagBlankLine.tid new file mode 100644 index 000000000..0c14b0527 --- /dev/null +++ b/editions/tw5.com/tiddlers/testcases/HTML/OpenTagBlankLine.tid @@ -0,0 +1,23 @@ +created: 20240622142425004 +description: Blank line after open tag +modified: 20240622144230258 +tags: $:/tags/wiki-test-spec +title: TestCases/HTML/OpenTagBlankLine +type: text/vnd.tiddlywiki-multiple + +title: Narrative + +A blank line after an open html tag allows block mode punctuation to be recognised ++ +title: Output + +<div> + +* blank line after open tag allows +* block mode punctuation (i.e. this list) to +* be recognised +</div> ++ +title: ExpectedResult + +<div><ul><li>blank line after open tag allows</li><li>block mode punctuation (i.e. this list) to</li><li>be recognised</li></ul></div> \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/testcases/HTML/OpenTagBlankLineInBoldSyntax.tid b/editions/tw5.com/tiddlers/testcases/HTML/OpenTagBlankLineInBoldSyntax.tid new file mode 100644 index 000000000..f6072bca4 --- /dev/null +++ b/editions/tw5.com/tiddlers/testcases/HTML/OpenTagBlankLineInBoldSyntax.tid @@ -0,0 +1,22 @@ +created: 20240622144038465 +description: Blank line after open tag in bold syntax +modified: 20240622145114506 +tags: $:/tags/wiki-test-spec +title: TestCases/HTML/OpenTagBlankLineInBoldSyntax +type: text/vnd.tiddlywiki-multiple + +title: Narrative + +A blank line after an open html tag allows block mode punctuation to be recognised even when the html is embedded within inline punctuation (bold here). ++ +title: Output + +''<div> + +* list item one +* list item two +</div>'' ++ +title: ExpectedResult + +<p><strong><div><ul><li>list item one</li><li>list item two</li></ul></div></strong></p> \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/testcases/HTML/OpenTagBlankLineInTableSyntax.tid b/editions/tw5.com/tiddlers/testcases/HTML/OpenTagBlankLineInTableSyntax.tid new file mode 100644 index 000000000..0835c47bc --- /dev/null +++ b/editions/tw5.com/tiddlers/testcases/HTML/OpenTagBlankLineInTableSyntax.tid @@ -0,0 +1,22 @@ +created: 20240622144753311 +description: Blank line after open tag in table syntax +modified: 20240622145056299 +tags: $:/tags/wiki-test-spec +title: TestCases/HTML/OpenTagBlankLineInTableSyntax +type: text/vnd.tiddlywiki-multiple + +title: Narrative + +A blank line after an open html tag cannot work when used inside table syntax since each row of a table must be all on one line ++ +title: Output + +|For a blank line after open tag|<div> + +* list is recognised +* but the surrounding table row is not +</div>| ++ +title: ExpectedResult + +<p>|For a blank line after open tag|<div><ul><li>list is recognised</li><li>but the surrounding table row is not</li></ul></div>|</p> \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/testcases/HTML/OpenTagNoBlankLine.tid b/editions/tw5.com/tiddlers/testcases/HTML/OpenTagNoBlankLine.tid new file mode 100644 index 000000000..e49fcabfb --- /dev/null +++ b/editions/tw5.com/tiddlers/testcases/HTML/OpenTagNoBlankLine.tid @@ -0,0 +1,34 @@ +created: 20240622143533021 +description: No blank line after open tag +modified: 20240622145145440 +tags: $:/tags/wiki-test-spec +title: TestCases/HTML/OpenTagNoBlankLine +type: text/vnd.tiddlywiki-multiple + +title: Narrative + +Block mode punctuation is not recognised when HTML open tag is not followed by a blank line ++ +title: Output + +<div> +* Open tag without a blank line means +* block mode punctuation (i.e. this list) will +* NOT be recognised. + +Paragraphs are only recognised in block mode. Even with blank lines, new paragraphs are not recognised. + +This also is not a new paragraph. +</div> ++ +title: ExpectedResult + +<p><div> +* Open tag without a blank line means +* block mode punctuation (i.e. this list) will +* NOT be recognised. + +Paragraphs are only recognised in block mode. Even with blank lines, new paragraphs are not recognised. + +This also is not a new paragraph. +</div></p> \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/wikitext/parser/WikiText parser mode_ HTML examples.tid b/editions/tw5.com/tiddlers/wikitext/parser/WikiText parser mode_ HTML examples.tid index fc068e44e..8d5483108 100644 --- a/editions/tw5.com/tiddlers/wikitext/parser/WikiText parser mode_ HTML examples.tid +++ b/editions/tw5.com/tiddlers/wikitext/parser/WikiText parser mode_ HTML examples.tid @@ -1,38 +1,20 @@ created: 20220122153235162 -modified: 20220122180508134 +modified: 20240713165558596 tags: [[WikiText parser mode transitions]] title: WikiText parser mode: HTML examples type: text/vnd.tiddlywiki -<<wikitext-example-without-html "<div> - -* blank line after open tag allows -* block mode punctuation (i.e. this list) to -* be recognised -</div> -">> +<<testcase TestCases/HTML/OpenTagBlankLine>> --- The open tag blank line "trick" also works inside of punctuation only recognised in inline mode (such as [[Formatting in WikiText]]): -<<wikitext-example-without-html "''<div> - -* list item one -* list item two -</div>''">> +<<testcase TestCases/HTML/OpenTagBlankLineInBoldSyntax>> --- -<<wikitext-example-without-html "<div> -* Open tag without a blank line means -* block mode punctuation (i.e. this list) will -* NOT be recognised. - -Paragraphs are only recognised in block mode. Even with blank lines, new paragraphs are not recognised. - -This also is not a new paragraph. -</div>">> +<<testcase TestCases/HTML/OpenTagNoBlankLine>> --- @@ -42,11 +24,7 @@ Adding a blank link after an open tag within a table cell causes the row to span <<wikitext-example-without-html "|table row|all on|one line|is recognised|">> -<<wikitext-example-without-html "|For a blank line after open tag|<div> - -* list is recognised -* but the surrounding table row is not -</div>|">> +<<testcase TestCases/HTML/OpenTagBlankLineInTableSyntax>> --- @@ -58,15 +36,4 @@ Note that <<.wlink MacroCallWidget>> does not have a similar <<.attr mode>> attr --- -The less convenient `<table>`, `<tr>`, `<td>` html tags can be used as a foolproof way to get [[block mode|Block Mode WikiText]] punctuation recognised inside of table cells. - -<<wikitext-example-without-html "<table> -<tr><td> - -* list item one -* list item two -</td><td> - -|nested|table| -</td></tr> -</table>">> \ No newline at end of file +<<testcase TestCases/HTML/BlockModeInHTMLTable>> \ No newline at end of file From 6505e4610fd4dd2b363540fcc88176181ae0b93f Mon Sep 17 00:00:00 2001 From: btheado <brian.theado@gmail.com> Date: Tue, 10 Sep 2024 06:49:04 -0400 Subject: [PATCH 35/82] Use the testcase widget for $action-createtiddler examples (#8232) * Use the testcase widget for the $action-createtiddler widget examples * Use procedure instead of macros for $action-createtiddler examples --- .../ActionCreateTiddlerWidget Example 1.tid | 25 ++++-------- .../ActionCreateTiddlerWidget Example 2.tid | 26 +++++-------- .../ActionCreateTiddlerWidget Example 3.tid | 27 +++++-------- .../ActionCreateTiddlerWidget Example 4.tid | 25 +++++------- .../ActionCreateTiddlerWidget Example 5.tid | 30 +++++--------- .../widgets/ActionCreateTiddlerWidget.tid | 39 ++----------------- .../ActionCreateTiddlerWidget_Example.tid | 24 ++++++++---- 7 files changed, 65 insertions(+), 131 deletions(-) diff --git a/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget Example 1.tid b/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget Example 1.tid index 57aee6673..ccc085e05 100644 --- a/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget Example 1.tid +++ b/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget Example 1.tid @@ -1,26 +1,15 @@ created: 20200131142401129 -modified: 20211113230406823 +modified: 20240602154417754 tags: ActionCreateTiddlerWidget title: ActionCreateTiddlerWidget Example 1 type: text/vnd.tiddlywiki -\define testCreate() -<$action-createtiddler /> -\end - -This example will create "New Tiddler", "New Tiddler 1", " New Tiddler 2" and so on - -``` -\define testCreate() -<$action-createtiddler /> -\end +<$testcase> +<$data title=Description text="Default widget with no attributes"/> +<$data title=Narrative text='The button in this example uses the $action-createtiddler widget to create "New Tiddler", "New Tiddler 1", " New Tiddler 2" and so on'/> +<$data title=Output text="""\procedure testCreate() <$action-createtiddler /> <$button actions=<<testCreate>> > Create Tiddler -</$button> -``` - -<$button actions=<<testCreate>> > -<$action-setfield $tiddler="$:/state/tab/sidebar--595412856" text="$:/core/ui/SideBar/Recent"/> -Create Tiddler -</$button> - Clicking this button, will also open the Right sidebar: Recent tab +</$button>"""/> +</$testcase> \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget Example 2.tid b/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget Example 2.tid index 336972a16..a9d204e75 100644 --- a/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget Example 2.tid +++ b/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget Example 2.tid @@ -1,28 +1,20 @@ created: 20200131144828713 -modified: 20211113011036840 +modified: 20240602160133371 tags: ActionCreateTiddlerWidget title: ActionCreateTiddlerWidget Example 2 type: text/vnd.tiddlywiki -\define testCreate() -<$action-createtiddler $basetitle={{$:/language/DefaultNewTiddlerTitle}} $overwrite="yes"/> -\end +<$testcase> +<$data title=Description text="Transcluded base title"/> +<$data title=Narrative text="""The $action-createtiddler widget in this example uses the base title defined in [[$:/language/DefaultNewTiddlerTitle]]. -This example will use the base title defined in [[$:/language/DefaultNewTiddlerTitle]]. - -It will overwrite the tiddler, if the button is clicked several times. - -``` -\define testCreate() +It will overwrite the tiddler if the button is clicked several times."""/> +<$data $tiddler="$:/language/DefaultNewTiddlerTitle"/> +<$data title=Output text="""\procedure testCreate() <$action-createtiddler $basetitle={{$:/language/DefaultNewTiddlerTitle}} $overwrite="yes"/> \end <$button actions=<<testCreate>> > Create Tiddler -</$button> -``` - -<$button actions=<<testCreate>> > -<$action-setfield $tiddler="$:/state/tab/sidebar--595412856" text="$:/core/ui/SideBar/Recent"/> -Create Tiddler -</$button> - Clicking this button, will also open the Right sidebar: Recent tab +</$button>"""/> +</$testcase> \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget Example 3.tid b/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget Example 3.tid index 2e137e330..a981bfe92 100644 --- a/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget Example 3.tid +++ b/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget Example 3.tid @@ -1,28 +1,21 @@ created: 20200131145355658 -modified: 20211113011111052 +modified: 20240602155233116 tags: ActionCreateTiddlerWidget title: ActionCreateTiddlerWidget Example 3 type: text/vnd.tiddlywiki -\define testCreate() -<$action-createtiddler $basetitle="base" $template="ActionCreateTiddlerWidget Template"/> -\end +<$testcase> +<$data title=Description text="Template and custom base title"/> +<$data title=Narrative text="""The $action-createtiddler widget in this example uses the basetitle attribute and template: [[ActionCreateTiddlerWidget Template]]. -This example will uses a base-title and a template: [[ActionCreateTiddlerWidget Template]] - -It will create: "base", "base 1", "base 2" and so on - -``` -\define testCreate() +Clicking the button will create: "base", "base 1", "base 2" and so on +"""/> +<$data $tiddler="ActionCreateTiddlerWidget Template"/> +<$data title=Output text="""\procedure testCreate() <$action-createtiddler $basetitle="base" $template="ActionCreateTiddlerWidget Template"/> \end <$button actions=<<testCreate>> > Create Tiddler -</$button> -``` - -<$button actions=<<testCreate>> > -<$action-setfield $tiddler="$:/state/tab/sidebar--595412856" text="$:/core/ui/SideBar/Recent"/> -Create Tiddler -</$button> - Clicking this button will also open the Right sidebar: Recent tab +</$button>"""/> +</$testcase> \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget Example 4.tid b/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget Example 4.tid index 1335893e5..b633f4359 100644 --- a/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget Example 4.tid +++ b/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget Example 4.tid @@ -1,28 +1,21 @@ created: 20200131150229551 -modified: 20211113011129601 +modified: 20240602154933113 tags: ActionCreateTiddlerWidget title: ActionCreateTiddlerWidget Example 4 type: text/vnd.tiddlywiki -\define testCreate() -<$action-createtiddler $basetitle="base" $template="ActionCreateTiddlerWidget Template" aa="new field aa" bb="new field bb" /> -\end - -This example uses a base-title "base" and a template: [[ActionCreateTiddlerWidget Template]]. +<$testcase> +<$data title=Description text="Template with override fields and custom base title"/> +<$data title=Narrative text="""The $action-createtiddler widget in this example uses the basetitle attribute and template: [[ActionCreateTiddlerWidget Template]]. There will be new fields "aa" and "bb" which are added to the new tiddlers. - -``` -\define testCreate() +"""/> +<$data $tiddler="ActionCreateTiddlerWidget Template"/> +<$data title=Output text="""\procedure testCreate() <$action-createtiddler $basetitle="base" $template="ActionCreateTiddlerWidget Template" aa="new field aa" bb="new field bb" /> \end <$button actions=<<testCreate>> > Create Tiddler -</$button> -``` - -<$button actions=<<testCreate>> > -<$action-setfield $tiddler="$:/state/tab/sidebar--595412856" text="$:/core/ui/SideBar/Recent"/> -Create Tiddler -</$button> - Clicking this button will also open the Right sidebar: Recent tab +</$button>"""/> +</$testcase> \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget Example 5.tid b/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget Example 5.tid index 03f719b8b..d0346d781 100644 --- a/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget Example 5.tid +++ b/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget Example 5.tid @@ -1,32 +1,20 @@ created: 20200131144828713 -modified: 20230111220933412 +modified: 20240602155008453 tags: ActionCreateTiddlerWidget title: ActionCreateTiddlerWidget Example 5 type: text/vnd.tiddlywiki -\define testCreate() +<$testcase> +<$data title=Description text="Child action widget uses the created tiddler title"/> +<$data title=Narrative text="""The $action-createtiddler widget in this example uses the <<.var createTiddler-title>> variable to navigate to the created tiddler"""/> +<$data $tiddler="ActionCreateTiddlerWidget Template"/> +<$data title=Output text="""\procedure testCreate() <$action-createtiddler $basetitle="base" $template="ActionCreateTiddlerWidget Template"> - <$action-sendmessage $message="tm-edit-tiddler" $param=<<createTiddler-title>>/> -</$action-createtiddler> -\end - -This example will use the base title defined in [[ActionCreateTiddlerWidget Template]]. - -It will create: "base", "base 1", "base 2" and so on, and navigate to this tiddler in draft mode. - -``` -\define testCreate() -<$action-createtiddler $basetitle="base" $template="ActionCreateTiddlerWidget Template"> - <$action-sendmessage $message="tm-edit-tiddler" $param=<<createTiddler-title>>/> + <$action-navigate $to=<<createTiddler-title>>/> </$action-createtiddler> \end <$button actions=<<testCreate>> > Create Tiddler -</$button> -``` - -<$button actions=<<testCreate>> > -<$action-setfield $tiddler="$:/state/tab/sidebar--595412856" text="$:/core/ui/SideBar/Recent"/> -Create Tiddler -</$button> - Clicking this button, will also open the Right sidebar: Recent tab +</$button>"""/> +</$testcase> \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget.tid b/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget.tid index 632b71686..85cb8ade8 100644 --- a/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget.tid +++ b/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget.tid @@ -1,6 +1,6 @@ caption: action-createtiddler created: 20161020152745942 -modified: 20230115084716196 +modified: 20240602153213986 tags: Widgets ActionWidgets title: ActionCreateTiddlerWidget type: text/vnd.tiddlywiki @@ -37,37 +37,6 @@ The ''action-createtiddler'' widget is invisible. ! Examples -<<< -<$macrocall $name='wikitext-example-without-html' src={{ActionCreateTiddlerWidget Example}}/> -<<< - ---- - -<<< -<$transclude tiddler="ActionCreateTiddlerWidget Example 1" mode=block/> -<<< - ---- - -<<< -{{ActionCreateTiddlerWidget Example 2}} -<<< - ---- - -<<< -{{ActionCreateTiddlerWidget Example 3}} -<<< - ---- - -<<< -{{ActionCreateTiddlerWidget Example 4}} -<<< - ---- - -<<< -{{ActionCreateTiddlerWidget Example 5}} -<<< - +<$list filter="[prefix[ActionCreateTiddlerWidget Example]]"> +<$transclude/> +</$list> \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget_Example.tid b/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget_Example.tid index 2a431ead9..728ed4576 100644 --- a/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget_Example.tid +++ b/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget_Example.tid @@ -1,14 +1,24 @@ created: 20161020153426686 -modified: 20211113011019510 +modified: 20240602160452171 tags: ActionCreateTiddlerWidget title: ActionCreateTiddlerWidget Example type: text/vnd.tiddlywiki +<$testcase> +<$data title=Description text="Create a new page control button"/> +<$data title=Narrative text="""Use the $action-createtiddler widget to create and open a new, non-functional page control button tiddler"""/> +<$data title=Output text="""\procedure testCreate() +<$action-createtiddler $basetitle="Homemade Button" tags="$:/tags/PageControls" text={{$:/state/new-button-caption}}> + <$action-navigate $to=<<createTiddler-title>>/> +</$action-createtiddler> +\end + +{{$:/core/ui/SideBarSegments/page-controls}} + Caption for new button: <$edit-text tiddler="$:/state/new-button-caption" tag="input" default=""/> -<$button> -<$action-createtiddler $basetitle="Homemade Button" tags="$:/tags/PageControls" text={{$:/state/new-button-caption}}> -<$action-navigate $to=<<createTiddler-title>>/> -</$action-createtiddler> -Create a new non-functional page control button and open the tiddler -</$button> \ No newline at end of file +<$button actions=<<testCreate>> > +Create Tiddler +</$button>"""/> +<$data title="$:/state/new-button-caption" text="button text "/> +</$testcase> \ No newline at end of file From 1368cd67cac850b95f7d04e3c5ab95f000b56567 Mon Sep 17 00:00:00 2001 From: Jeremy Ruston <jeremy@jermolene.com> Date: Tue, 10 Sep 2024 11:50:08 +0100 Subject: [PATCH 36/82] Fix missing closing tag, and update erroneous docs (#8340) --- core/templates/tiddlywiki5.html.tid | 1 + core/wiki/macros/tag.tid | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/core/templates/tiddlywiki5.html.tid b/core/templates/tiddlywiki5.html.tid index a94ae2693..721b3d9ce 100644 --- a/core/templates/tiddlywiki5.html.tid +++ b/core/templates/tiddlywiki5.html.tid @@ -57,3 +57,4 @@ title: $:/core/templates/tiddlywiki5.html `{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified/BottomBody]] ||$:/core/templates/raw-static-tiddler}}}` </body> </html>` +</$set> diff --git a/core/wiki/macros/tag.tid b/core/wiki/macros/tag.tid index eedbd0c4c..2c539b42e 100644 --- a/core/wiki/macros/tag.tid +++ b/core/wiki/macros/tag.tid @@ -7,7 +7,7 @@ fill:$(foregroundColor)$; color:$(foregroundColor)$; \end -<!-- This has no whitespace trim to avoid modifying $actions$. Closing tags omitted for brevity. --> +<!-- This has no whitespace trim to avoid modifying $actions$ --> \define tag-pill-inner(tag,icon,colour,fallbackTarget,colourA,colourB,element-tag,element-attributes,actions) \whitespace trim <$let From eaf855859556e7a206380a32c86e6f9a9167799d Mon Sep 17 00:00:00 2001 From: Leilei332 <LeiYiXia29@outlook.com> Date: Tue, 10 Sep 2024 19:00:13 +0800 Subject: [PATCH 37/82] Update PageControls buttons to use v5.3.2 syntax (#8579) * Let PageControls buttons use v5.3.2 syntax * Rewrite buttons and actions * Omit whitespace & use function to avoid duplicating * Omit whitespace in conditional syntax * Define tf.get-tags function to avoid duplicated text substitution * Rewrite advanced search button * Add space in join operator * Rewrite buttons in plugins * Remove tf prefix in new-journal.tid * Remove tf prefix in new-tiddler.tid --- core/ui/Actions/new-journal.tid | 8 ++-- core/ui/Actions/new-tiddler.tid | 6 +-- core/ui/PageControls/advanced-search.tid | 13 +++---- core/ui/PageControls/closeall.tid | 10 ++--- core/ui/PageControls/controlpanel.tid | 13 +++---- core/ui/PageControls/encryption.tid | 16 ++++---- core/ui/PageControls/export-page.tid | 2 +- core/ui/PageControls/fold-all.tid | 10 ++--- core/ui/PageControls/full-screen.tid | 10 ++--- core/ui/PageControls/home.tid | 10 ++--- core/ui/PageControls/import.tid | 10 ++--- core/ui/PageControls/language.tid | 21 +++++----- core/ui/PageControls/layout.tid | 8 ++-- core/ui/PageControls/manager.tid | 13 +++---- core/ui/PageControls/more-page-actions.tid | 38 +++++++++---------- core/ui/PageControls/network-activity.tid | 10 ++--- core/ui/PageControls/new-image.tid | 8 ++-- core/ui/PageControls/new-journal.tid | 11 +++--- core/ui/PageControls/newtiddler.tid | 8 ++-- core/ui/PageControls/palette.tid | 8 ++-- core/ui/PageControls/print.tid | 10 ++--- core/ui/PageControls/refresh.tid | 10 ++--- core/ui/PageControls/savewiki.tid | 10 ++--- core/ui/PageControls/storyview.tid | 13 +++---- core/ui/PageControls/tag-button.tid | 13 +++---- core/ui/PageControls/theme.tid | 8 ++-- core/ui/PageControls/timestamp.tid | 16 ++++---- core/ui/PageControls/unfold-all.tid | 10 ++--- plugins/tiddlywiki/help/help.tid | 16 ++++---- .../markdown-legacy/new-markdown.tid | 8 ++-- plugins/tiddlywiki/markdown/new-markdown.tid | 8 ++-- .../tiddlywiki/tiddlyweb/save-wiki-button.tid | 8 ++-- 32 files changed, 174 insertions(+), 189 deletions(-) diff --git a/core/ui/Actions/new-journal.tid b/core/ui/Actions/new-journal.tid index 9df31cb97..9d663e537 100644 --- a/core/ui/Actions/new-journal.tid +++ b/core/ui/Actions/new-journal.tid @@ -2,10 +2,10 @@ title: $:/core/ui/Actions/new-journal tags: $:/tags/Actions description: create a new journal tiddler -\define get-tags() $(textFieldTags)$ $(tagsFieldTags)$ \whitespace trim -<$vars journalTitleTemplate={{$:/config/NewJournal/Title}} textFieldTags={{$:/config/NewJournal/Tags}} tagsFieldTags={{$:/config/NewJournal/Tags!!tags}} journalText={{$:/config/NewJournal/Text}}> -<$wikify name="journalTitle" text="<$macrocall $name='now' format=<<journalTitleTemplate>>/>"> +\function get-tags() [<textFieldTags>] [<tagsFieldTags>] +[join[ ]] +<$let journalTitleTemplate={{$:/config/NewJournal/Title}} textFieldTags={{$:/config/NewJournal/Tags}} tagsFieldTags={{$:/config/NewJournal/Tags!!tags}} journalText={{$:/config/NewJournal/Text}}> +<$wikify name="journalTitle" text="<$transclude $variable='now' format=<<journalTitleTemplate>>/>"> <$reveal type="nomatch" state=<<journalTitle>> text=""> <$action-sendmessage $message="tm-new-tiddler" title=<<journalTitle>> tags=<<get-tags>> text={{{ [<journalTitle>get[]] }}}/> </$reveal> @@ -13,4 +13,4 @@ description: create a new journal tiddler <$action-sendmessage $message="tm-new-tiddler" title=<<journalTitle>> tags=<<get-tags>> text=<<journalText>>/> </$reveal> </$wikify> -</$vars> +</$let> diff --git a/core/ui/Actions/new-tiddler.tid b/core/ui/Actions/new-tiddler.tid index f71331327..847130800 100644 --- a/core/ui/Actions/new-tiddler.tid +++ b/core/ui/Actions/new-tiddler.tid @@ -2,8 +2,8 @@ title: $:/core/ui/Actions/new-tiddler tags: $:/tags/Actions description: create a new empty tiddler -\define get-tags() $(textFieldTags)$ $(tagsFieldTags)$ \whitespace trim -<$vars textFieldTags={{$:/config/NewTiddler/Tags}} tagsFieldTags={{$:/config/NewTiddler/Tags!!tags}}> +\function get-tags() [<textFieldTags>] [<tagsFieldTags>] +[join[ ]] +<$let textFieldTags={{$:/config/NewTiddler/Tags}} tagsFieldTags={{$:/config/NewTiddler/Tags!!tags}}> <$action-sendmessage $message="tm-new-tiddler" tags=<<get-tags>>/> -</$vars> +</$let> diff --git a/core/ui/PageControls/advanced-search.tid b/core/ui/PageControls/advanced-search.tid index 1549b07f4..4aa49e6e5 100644 --- a/core/ui/PageControls/advanced-search.tid +++ b/core/ui/PageControls/advanced-search.tid @@ -4,15 +4,14 @@ caption: {{$:/core/images/advanced-search-button}} {{$:/language/Buttons/Advance description: {{$:/language/Buttons/AdvancedSearch/Hint}} \whitespace trim -\define advanced-search-button(class) -\whitespace trim -<$button to="$:/AdvancedSearch" tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class="""$(tv-config-toolbar-class)$ $class$"""> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +\procedure advanced-search-button(class) +<$button to="$:/AdvancedSearch" tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=`$(tv-config-toolbar-class)$ $(class)$`> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/advanced-search-button}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"><$text text={{$:/language/Buttons/AdvancedSearch/Caption}}/></span> -</$list> +<%endif%> </$button> \end diff --git a/core/ui/PageControls/closeall.tid b/core/ui/PageControls/closeall.tid index 2665fff0d..23aefa8be 100644 --- a/core/ui/PageControls/closeall.tid +++ b/core/ui/PageControls/closeall.tid @@ -5,12 +5,12 @@ description: {{$:/language/Buttons/CloseAll/Hint}} \whitespace trim <$button message="tm-close-all-tiddlers" tooltip={{$:/language/Buttons/CloseAll/Hint}} aria-label={{$:/language/Buttons/CloseAll/Caption}} class=<<tv-config-toolbar-class>>> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/close-all-button}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"> <$text text={{$:/language/Buttons/CloseAll/Caption}}/> </span> -</$list> -</$button> \ No newline at end of file +<%endif%> +</$button> diff --git a/core/ui/PageControls/controlpanel.tid b/core/ui/PageControls/controlpanel.tid index 872d640ac..8b9db8d9a 100644 --- a/core/ui/PageControls/controlpanel.tid +++ b/core/ui/PageControls/controlpanel.tid @@ -4,15 +4,14 @@ caption: {{$:/core/images/options-button}} {{$:/language/Buttons/ControlPanel/Ca description: {{$:/language/Buttons/ControlPanel/Hint}} \whitespace trim -\define control-panel-button(class) -\whitespace trim -<$button to="$:/ControlPanel" tooltip={{$:/language/Buttons/ControlPanel/Hint}} aria-label={{$:/language/Buttons/ControlPanel/Caption}} class="""$(tv-config-toolbar-class)$ $class$"""> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +\procedure control-panel-button(class) +<$button to="$:/ControlPanel" tooltip={{$:/language/Buttons/ControlPanel/Hint}} aria-label={{$:/language/Buttons/ControlPanel/Caption}} class=`$(tv-config-toolbar-class)$ $(class)$`> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/options-button}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"><$text text={{$:/language/Buttons/ControlPanel/Caption}}/></span> -</$list> +<%endif%> </$button> \end diff --git a/core/ui/PageControls/encryption.tid b/core/ui/PageControls/encryption.tid index 9f8ae0bd6..572d162de 100644 --- a/core/ui/PageControls/encryption.tid +++ b/core/ui/PageControls/encryption.tid @@ -6,25 +6,25 @@ description: {{$:/language/Buttons/Encryption/Hint}} \whitespace trim <$reveal type="match" state="$:/isEncrypted" text="yes"> <$button message="tm-clear-password" tooltip={{$:/language/Buttons/Encryption/ClearPassword/Hint}} aria-label={{$:/language/Buttons/Encryption/ClearPassword/Caption}} class=<<tv-config-toolbar-class>>> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/locked-padlock}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"> <$text text={{$:/language/Buttons/Encryption/ClearPassword/Caption}}/> </span> -</$list> +<%endif%> </$button> </$reveal> <$reveal type="nomatch" state="$:/isEncrypted" text="yes"> <$button message="tm-set-password" tooltip={{$:/language/Buttons/Encryption/SetPassword/Hint}} aria-label={{$:/language/Buttons/Encryption/SetPassword/Caption}} class=<<tv-config-toolbar-class>>> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/unlocked-padlock}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"> <$text text={{$:/language/Buttons/Encryption/SetPassword/Caption}}/> </span> -</$list> +<%endif%> </$button> </$reveal> diff --git a/core/ui/PageControls/export-page.tid b/core/ui/PageControls/export-page.tid index fe036abf7..902f643e9 100644 --- a/core/ui/PageControls/export-page.tid +++ b/core/ui/PageControls/export-page.tid @@ -3,4 +3,4 @@ tags: $:/tags/PageControls caption: {{$:/core/images/export-button}} {{$:/language/Buttons/ExportPage/Caption}} description: {{$:/language/Buttons/ExportPage/Hint}} -<$macrocall $name="exportButton" exportFilter="[!is[system]sort[title]]" lingoBase="$:/language/Buttons/ExportPage/"/> \ No newline at end of file +<$transclude $variable="exportButton" exportFilter="[!is[system]sort[title]]" lingoBase="$:/language/Buttons/ExportPage/"/> \ No newline at end of file diff --git a/core/ui/PageControls/fold-all.tid b/core/ui/PageControls/fold-all.tid index 46c3165b8..dba6bb1b6 100644 --- a/core/ui/PageControls/fold-all.tid +++ b/core/ui/PageControls/fold-all.tid @@ -6,12 +6,12 @@ description: {{$:/language/Buttons/FoldAll/Hint}} \whitespace trim <$button tooltip={{$:/language/Buttons/FoldAll/Hint}} aria-label={{$:/language/Buttons/FoldAll/Caption}} class=<<tv-config-toolbar-class>>> <$action-sendmessage $message="tm-fold-all-tiddlers" $param=<<currentTiddler>> foldedStatePrefix="$:/state/folded/"/> -<$list filter="[<tv-config-toolbar-icons>match[yes]]" variable="listItem"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/fold-all-button}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"> <$text text={{$:/language/Buttons/FoldAll/Caption}}/> </span> -</$list> -</$button> \ No newline at end of file +<%endif%> +</$button> diff --git a/core/ui/PageControls/full-screen.tid b/core/ui/PageControls/full-screen.tid index ada7d5a65..864ee5c26 100644 --- a/core/ui/PageControls/full-screen.tid +++ b/core/ui/PageControls/full-screen.tid @@ -5,12 +5,12 @@ description: {{$:/language/Buttons/FullScreen/Hint}} \whitespace trim <$button message="tm-full-screen" tooltip={{$:/language/Buttons/FullScreen/Hint}} aria-label={{$:/language/Buttons/FullScreen/Caption}} class=<<tv-config-toolbar-class>>> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/full-screen-button}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"> <$text text={{$:/language/Buttons/FullScreen/Caption}}/> </span> -</$list> -</$button> \ No newline at end of file +<%endif%> +</$button> diff --git a/core/ui/PageControls/home.tid b/core/ui/PageControls/home.tid index f3a0b1787..6c1d5a789 100644 --- a/core/ui/PageControls/home.tid +++ b/core/ui/PageControls/home.tid @@ -5,12 +5,12 @@ description: {{$:/language/Buttons/Home/Hint}} \whitespace trim <$button message="tm-home" tooltip={{$:/language/Buttons/Home/Hint}} aria-label={{$:/language/Buttons/Home/Caption}} class=<<tv-config-toolbar-class>>> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/home-button}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"> <$text text={{$:/language/Buttons/Home/Caption}}/> </span> -</$list> -</$button> \ No newline at end of file +<%endif%> +</$button> diff --git a/core/ui/PageControls/import.tid b/core/ui/PageControls/import.tid index 39ca51eb6..11474db22 100644 --- a/core/ui/PageControls/import.tid +++ b/core/ui/PageControls/import.tid @@ -6,14 +6,14 @@ description: {{$:/language/Buttons/Import/Hint}} \whitespace trim <div class="tc-file-input-wrapper"> <$button tooltip={{$:/language/Buttons/Import/Hint}} aria-label={{$:/language/Buttons/Import/Caption}} class=<<tv-config-toolbar-class>>> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/import-button}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"> <$text text={{$:/language/Buttons/Import/Caption}}/> </span> -</$list> +<%endif%> </$button> <$browse tooltip={{$:/language/Buttons/Import/Hint}}/> -</div> \ No newline at end of file +</div> diff --git a/core/ui/PageControls/language.tid b/core/ui/PageControls/language.tid index 623c71004..3315b5a23 100644 --- a/core/ui/PageControls/language.tid +++ b/core/ui/PageControls/language.tid @@ -4,21 +4,18 @@ caption: {{$:/core/images/globe}} {{$:/language/Buttons/Language/Caption}} description: {{$:/language/Buttons/Language/Hint}} \whitespace trim -\define flag-title() -$(languagePluginTitle)$/icon -\end <span class="tc-popup-keep"> <$button popup=<<qualify "$:/state/popup/language">> tooltip={{$:/language/Buttons/Language/Hint}} aria-label={{$:/language/Buttons/Language/Caption}} class=<<tv-config-toolbar-class>> selectedClass="tc-selected"> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> -<span class="tc-image-button"> -<$set name="languagePluginTitle" value={{$:/language}}> -<$image source=<<flag-title>>/> -</$set> -</span> -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%if [<tv-config-toolbar-icons>match[yes]] %> + <span class="tc-image-button"> + <$set name="languagePluginTitle" value={{$:/language}}> + <$image source=`$(languagePluginTitle)$/icon`/> + </$set> + </span> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"><$text text={{$:/language/Buttons/Language/Caption}}/></span> -</$list> +<%endif%> </$button> </span> <$reveal state=<<qualify "$:/state/popup/language">> type="popup" position="below" animate="yes"> diff --git a/core/ui/PageControls/layout.tid b/core/ui/PageControls/layout.tid index 703bbcb1b..c9a0f596b 100644 --- a/core/ui/PageControls/layout.tid +++ b/core/ui/PageControls/layout.tid @@ -6,10 +6,10 @@ description: {{$:/language/LayoutSwitcher/Description}} \whitespace trim <$button tooltip={{$:/language/Buttons/LayoutSwitcher/Hint}} aria-label={{$:/language/Buttons/LayoutSwitcher/Caption}} class=<<tv-config-toolbar-class>>> <$action-sendmessage $message="tm-show-switcher" switch="layout"/> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/layout-button}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"><$text text={{$:/language/Buttons/LayoutSwitcher/Caption}}/></span> -</$list> +<%endif%> </$button> diff --git a/core/ui/PageControls/manager.tid b/core/ui/PageControls/manager.tid index d2144c574..3cc364f80 100644 --- a/core/ui/PageControls/manager.tid +++ b/core/ui/PageControls/manager.tid @@ -4,17 +4,16 @@ caption: {{$:/core/images/list}} {{$:/language/Buttons/Manager/Caption}} description: {{$:/language/Buttons/Manager/Hint}} \whitespace trim -\define manager-button(class) -\whitespace trim -<$button to="$:/Manager" tooltip={{$:/language/Buttons/Manager/Hint}} aria-label={{$:/language/Buttons/Manager/Caption}} class="""$(tv-config-toolbar-class)$ $class$"""> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +\procedure manager-button(class) +<$button to="$:/Manager" tooltip={{$:/language/Buttons/Manager/Hint}} aria-label={{$:/language/Buttons/Manager/Caption}} class=`$(tv-config-toolbar-class)$ $(class)$`> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/list}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"> <$text text={{$:/language/Buttons/Manager/Caption}}/> </span> -</$list> +<%endif%> </$button> \end diff --git a/core/ui/PageControls/more-page-actions.tid b/core/ui/PageControls/more-page-actions.tid index 3acaef2b6..7453b9df7 100644 --- a/core/ui/PageControls/more-page-actions.tid +++ b/core/ui/PageControls/more-page-actions.tid @@ -12,33 +12,29 @@ description: {{$:/language/Buttons/More/Hint}} class=<<tv-config-toolbar-class>> selectedClass="tc-selected" > - <$list filter="[<tv-config-toolbar-icons>match[yes]]"> + <%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/down-arrow}} - </$list> - <$list filter="[<tv-config-toolbar-text>match[yes]]"> + <%endif%> + <%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"> <$text text={{$:/language/Buttons/More/Caption}}/> </span> - </$list> + <%endif%> </$button> <$reveal state=<<qualify "$:/state/popup/more">> type="popup" position="below" animate="yes"> <div class="tc-drop-down"> - <$set name="tv-config-toolbar-icons" value="yes"> - <$set name="tv-config-toolbar-text" value="yes"> - <$set name="tv-config-toolbar-class" value="tc-btn-invisible"> - <$list filter="[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]] -[[$:/core/ui/Buttons/more-page-actions]]" - variable="listItem" + <$let tv-config-toolbar-icons="yes" tv-config-toolbar-text="yes" tv-config-toolbar-class="tc-btn-invisible"> + <$list filter="[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]] -[[$:/core/ui/Buttons/more-page-actions]]" + variable="listItem" + > + <$reveal type="match" state=<<config-title>> text="hide"> + <$set name="tv-config-toolbar-class" + filter="[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]" > - <$reveal type="match" state=<<config-title>> text="hide"> - <$set name="tv-config-toolbar-class" - filter="[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]" - > - <$transclude tiddler=<<listItem>> mode="inline"/> - </$set> - </$reveal> - </$list> - </$set> - </$set> - </$set> + <$transclude tiddler=<<listItem>> mode="inline"/> + </$set> + </$reveal> + </$list> + </$let> </div> -</$reveal> \ No newline at end of file +</$reveal> diff --git a/core/ui/PageControls/network-activity.tid b/core/ui/PageControls/network-activity.tid index 763365f37..7be25b261 100644 --- a/core/ui/PageControls/network-activity.tid +++ b/core/ui/PageControls/network-activity.tid @@ -5,12 +5,12 @@ description: {{$:/language/Buttons/NetworkActivity/Hint}} \whitespace trim <$button message="tm-http-cancel-all-requests" tooltip={{$:/language/Buttons/NetworkActivity/Hint}} aria-label={{$:/language/Buttons/NetworkActivity/Caption}} class=<<tv-config-toolbar-class>>> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/network-activity}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"> <$text text={{$:/language/Buttons/NetworkActivity/Caption}}/> </span> -</$list> -</$button> \ No newline at end of file +<%endif%> +</$button> diff --git a/core/ui/PageControls/new-image.tid b/core/ui/PageControls/new-image.tid index b37fba7c5..0cf954966 100644 --- a/core/ui/PageControls/new-image.tid +++ b/core/ui/PageControls/new-image.tid @@ -5,12 +5,12 @@ description: {{$:/language/Buttons/NewImage/Hint}} \whitespace trim <$button tooltip={{$:/language/Buttons/NewImage/Hint}} aria-label={{$:/language/Buttons/NewImage/Caption}} class=<<tv-config-toolbar-class>> actions={{$:/core/ui/Actions/new-image}}> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/new-image-button}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"> <$text text={{$:/language/Buttons/NewImage/Caption}}/> </span> -</$list> +<%endif%> </$button> diff --git a/core/ui/PageControls/new-journal.tid b/core/ui/PageControls/new-journal.tid index 8ae8ee78a..8330b8cb7 100644 --- a/core/ui/PageControls/new-journal.tid +++ b/core/ui/PageControls/new-journal.tid @@ -4,17 +4,16 @@ caption: {{$:/core/images/new-journal-button}} {{$:/language/Buttons/NewJournal/ description: {{$:/language/Buttons/NewJournal/Hint}} \whitespace trim -\define journalButton() -\whitespace trim +\procedure journalButton() <$button tooltip={{$:/language/Buttons/NewJournal/Hint}} aria-label={{$:/language/Buttons/NewJournal/Caption}} class=<<tv-config-toolbar-class>> actions={{$:/core/ui/Actions/new-journal}}> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/new-journal-button}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"> <$text text={{$:/language/Buttons/NewJournal/Caption}}/> </span> -</$list> +<%endif%> </$button> \end <<journalButton>> diff --git a/core/ui/PageControls/newtiddler.tid b/core/ui/PageControls/newtiddler.tid index cd2f56913..f6a6e6891 100644 --- a/core/ui/PageControls/newtiddler.tid +++ b/core/ui/PageControls/newtiddler.tid @@ -5,12 +5,12 @@ description: {{$:/language/Buttons/NewTiddler/Hint}} \whitespace trim <$button actions={{$:/core/ui/Actions/new-tiddler}} tooltip={{$:/language/Buttons/NewTiddler/Hint}} aria-label={{$:/language/Buttons/NewTiddler/Caption}} class=<<tv-config-toolbar-class>>> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/new-button}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"> <$text text={{$:/language/Buttons/NewTiddler/Caption}}/> </span> -</$list> +<%endif%> </$button> diff --git a/core/ui/PageControls/palette.tid b/core/ui/PageControls/palette.tid index 6fdbdb439..efa016d49 100644 --- a/core/ui/PageControls/palette.tid +++ b/core/ui/PageControls/palette.tid @@ -6,12 +6,12 @@ description: {{$:/language/Buttons/Palette/Hint}} \whitespace trim <span class="tc-popup-keep"> <$button popup=<<qualify "$:/state/popup/palette">> tooltip={{$:/language/Buttons/Palette/Hint}} aria-label={{$:/language/Buttons/Palette/Caption}} class=<<tv-config-toolbar-class>> selectedClass="tc-selected"> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/palette}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"><$text text={{$:/language/Buttons/Palette/Caption}}/></span> -</$list> +<%endif%> </$button> </span> <$reveal state=<<qualify "$:/state/popup/palette">> type="popup" position="below" animate="yes"> diff --git a/core/ui/PageControls/print.tid b/core/ui/PageControls/print.tid index ef664b6e3..994303d25 100644 --- a/core/ui/PageControls/print.tid +++ b/core/ui/PageControls/print.tid @@ -5,12 +5,12 @@ description: {{$:/language/Buttons/Print/Hint}} \whitespace trim <$button message="tm-print" tooltip={{$:/language/Buttons/Print/Hint}} aria-label={{$:/language/Buttons/Print/Caption}} class=<<tv-config-toolbar-class>>> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/print-button}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"> <$text text={{$:/language/Buttons/Print/Caption}}/> </span> -</$list> -</$button> \ No newline at end of file +<%endif%> +</$button> diff --git a/core/ui/PageControls/refresh.tid b/core/ui/PageControls/refresh.tid index 38692f817..5a8773b77 100644 --- a/core/ui/PageControls/refresh.tid +++ b/core/ui/PageControls/refresh.tid @@ -5,12 +5,12 @@ description: {{$:/language/Buttons/Refresh/Hint}} \whitespace trim <$button message="tm-browser-refresh" tooltip={{$:/language/Buttons/Refresh/Hint}} aria-label={{$:/language/Buttons/Refresh/Caption}} class=<<tv-config-toolbar-class>>> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/refresh-button}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"> <$text text={{$:/language/Buttons/Refresh/Caption}}/> </span> -</$list> -</$button> \ No newline at end of file +<%endif%> +</$button> diff --git a/core/ui/PageControls/savewiki.tid b/core/ui/PageControls/savewiki.tid index 60f8dc99f..7e6a18ccc 100644 --- a/core/ui/PageControls/savewiki.tid +++ b/core/ui/PageControls/savewiki.tid @@ -9,13 +9,13 @@ description: {{$:/language/Buttons/SaveWiki/Hint}} <$action-sendmessage $message="tm-save-wiki" $param={{$:/config/SaveWikiButton/Template}} filename=<<site-title>>/> </$wikify> <span class="tc-dirty-indicator"> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/save-button-dynamic}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"> <$text text={{$:/language/Buttons/SaveWiki/Caption}}/> </span> -</$list> +<%endif%> </span> -</$button> \ No newline at end of file +</$button> diff --git a/core/ui/PageControls/storyview.tid b/core/ui/PageControls/storyview.tid index c4d0b7365..7738cfa97 100644 --- a/core/ui/PageControls/storyview.tid +++ b/core/ui/PageControls/storyview.tid @@ -4,19 +4,16 @@ caption: {{$:/core/images/storyview-classic}} {{$:/language/Buttons/StoryView/Ca description: {{$:/language/Buttons/StoryView/Hint}} \whitespace trim -\define icon() -$:/core/images/storyview-$(storyview)$ -\end <span class="tc-popup-keep"> <$button popup=<<qualify "$:/state/popup/storyview">> tooltip={{$:/language/Buttons/StoryView/Hint}} aria-label={{$:/language/Buttons/StoryView/Caption}} class=<<tv-config-toolbar-class>> selectedClass="tc-selected"> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +<%if [<tv-config-toolbar-icons>match[yes]] %> <$set name="storyview" value={{$:/view}}> -<$transclude tiddler=<<icon>>/> +<$transclude tiddler=`$:/core/images/storyview-$(storyview)$`/> </$set> -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"><$text text={{$:/language/Buttons/StoryView/Caption}}/></span> -</$list> +<%endif%> </$button> </span> <$reveal state=<<qualify "$:/state/popup/storyview">> type="popup" position="below" animate="yes"> diff --git a/core/ui/PageControls/tag-button.tid b/core/ui/PageControls/tag-button.tid index e2b5c9277..6c04804ce 100644 --- a/core/ui/PageControls/tag-button.tid +++ b/core/ui/PageControls/tag-button.tid @@ -4,17 +4,16 @@ caption: {{$:/core/images/tag-button}} {{$:/language/Buttons/TagManager/Caption} description: {{$:/language/Buttons/TagManager/Hint}} \whitespace trim -\define control-panel-button(class) -\whitespace trim -<$button to="$:/TagManager" tooltip={{$:/language/Buttons/TagManager/Hint}} aria-label={{$:/language/Buttons/TagManager/Caption}} class="""$(tv-config-toolbar-class)$ $class$"""> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +\procedure control-panel-button(class) +<$button to="$:/TagManager" tooltip={{$:/language/Buttons/TagManager/Hint}} aria-label={{$:/language/Buttons/TagManager/Caption}} class=`$(tv-config-toolbar-class)$ $(class)$`> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/tag-button}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"> <$text text={{$:/language/Buttons/TagManager/Caption}}/> </span> -</$list> +<%endif%> </$button> \end diff --git a/core/ui/PageControls/theme.tid b/core/ui/PageControls/theme.tid index 2d8eadc7b..60e37a95e 100644 --- a/core/ui/PageControls/theme.tid +++ b/core/ui/PageControls/theme.tid @@ -6,12 +6,12 @@ description: {{$:/language/Buttons/Theme/Hint}} \whitespace trim <span class="tc-popup-keep"> <$button popup=<<qualify "$:/state/popup/theme">> tooltip={{$:/language/Buttons/Theme/Hint}} aria-label={{$:/language/Buttons/Theme/Caption}} class=<<tv-config-toolbar-class>> selectedClass="tc-selected"> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/theme-button}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"><$text text={{$:/language/Buttons/Theme/Caption}}/></span> -</$list> +<%endif%> </$button> </span> <$reveal state=<<qualify "$:/state/popup/theme">> type="popup" position="below" animate="yes"> diff --git a/core/ui/PageControls/timestamp.tid b/core/ui/PageControls/timestamp.tid index a54b3f2ca..0186d7c12 100644 --- a/core/ui/PageControls/timestamp.tid +++ b/core/ui/PageControls/timestamp.tid @@ -7,26 +7,26 @@ description: {{$:/language/Buttons/Timestamp/Hint}} <$reveal type="nomatch" state="$:/config/TimestampDisable" text="yes"> <$button tooltip={{$:/language/Buttons/Timestamp/On/Hint}} aria-label={{$:/language/Buttons/Timestamp/On/Caption}} class=<<tv-config-toolbar-class>>> <$action-setfield $tiddler="$:/config/TimestampDisable" $value="yes"/> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/timestamp-on}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"> <$text text={{$:/language/Buttons/Timestamp/On/Caption}}/> </span> -</$list> +<%endif%> </$button> </$reveal> <$reveal type="match" state="$:/config/TimestampDisable" text="yes"> <$button tooltip={{$:/language/Buttons/Timestamp/Off/Hint}} aria-label={{$:/language/Buttons/Timestamp/Off/Caption}} class=<<tv-config-toolbar-class>>> <$action-setfield $tiddler="$:/config/TimestampDisable" $value="no"/> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/timestamp-off}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"> <$text text={{$:/language/Buttons/Timestamp/Off/Caption}}/> </span> -</$list> +<%endif%> </$button> </$reveal> diff --git a/core/ui/PageControls/unfold-all.tid b/core/ui/PageControls/unfold-all.tid index 6e8357a3b..e0d26bc49 100644 --- a/core/ui/PageControls/unfold-all.tid +++ b/core/ui/PageControls/unfold-all.tid @@ -6,12 +6,12 @@ description: {{$:/language/Buttons/UnfoldAll/Hint}} \whitespace trim <$button tooltip={{$:/language/Buttons/UnfoldAll/Hint}} aria-label={{$:/language/Buttons/UnfoldAll/Caption}} class=<<tv-config-toolbar-class>>> <$action-sendmessage $message="tm-unfold-all-tiddlers" $param=<<currentTiddler>> foldedStatePrefix="$:/state/folded/"/> -<$list filter="[<tv-config-toolbar-icons>match[yes]]" variable="listItem"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/unfold-all-button}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"> <$text text={{$:/language/Buttons/UnfoldAll/Caption}}/> </span> -</$list> -</$button> \ No newline at end of file +<%endif%> +</$button> diff --git a/plugins/tiddlywiki/help/help.tid b/plugins/tiddlywiki/help/help.tid index eca5ffaa7..f29d9dbdf 100644 --- a/plugins/tiddlywiki/help/help.tid +++ b/plugins/tiddlywiki/help/help.tid @@ -8,22 +8,22 @@ description: {{$:/language/Buttons/Help/Hint}} \whitespace trim <$list filter="[[$:/config/ShowHelp]get[text]] +[else[no]match[yes]]" variable="ignore"> <$button set="$:/config/ShowHelp" setTo="no" tooltip={{$:/language/Buttons/Help/Hint}} aria-label={{$:/language/Buttons/Help/Caption}} class="""$(tv-config-toolbar-class)$ tc-selected"""> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/help}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"><$text text={{$:/language/Buttons/Help/Caption}}/></span> -</$list> +<%endif%> </$button> </$list> <$list filter="[[$:/config/ShowHelp]get[text]] +[else[no]!match[yes]]" variable="ignore"> <$button set="$:/config/ShowHelp" setTo="yes" tooltip={{$:/language/Buttons/Help/Hint}} aria-label={{$:/language/Buttons/Help/Caption}} class=<<tv-config-toolbar-class>>> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/help}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"><$text text={{$:/language/Buttons/Help/Caption}}/></span> -</$list> +<%endif%> </$button> </$list> \end diff --git a/plugins/tiddlywiki/markdown-legacy/new-markdown.tid b/plugins/tiddlywiki/markdown-legacy/new-markdown.tid index 507c265a5..8d8f587d8 100755 --- a/plugins/tiddlywiki/markdown-legacy/new-markdown.tid +++ b/plugins/tiddlywiki/markdown-legacy/new-markdown.tid @@ -7,10 +7,10 @@ list-after: $:/core/ui/Buttons/new-tiddler \whitespace trim <$button tooltip={{$:/language/Buttons/NewMarkdown/Hint}} aria-label={{$:/language/Buttons/NewMarkdown/Caption}} class=<<tv-config-toolbar-class>>> <$action-sendmessage $message="tm-new-tiddler" type="text/markdown"/> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/plugins/tiddlywiki/markdown-legacy/images/new-markdown-button}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"><$text text={{$:/language/Buttons/NewMarkdown/Caption}}/></span> -</$list> +<%endif%> </$button> diff --git a/plugins/tiddlywiki/markdown/new-markdown.tid b/plugins/tiddlywiki/markdown/new-markdown.tid index 192543d77..404046360 100755 --- a/plugins/tiddlywiki/markdown/new-markdown.tid +++ b/plugins/tiddlywiki/markdown/new-markdown.tid @@ -7,10 +7,10 @@ list-after: $:/core/ui/Buttons/new-tiddler \whitespace trim <$button tooltip={{$:/language/Buttons/NewMarkdown/Hint}} aria-label={{$:/language/Buttons/NewMarkdown/Caption}} class=<<tv-config-toolbar-class>>> <$action-sendmessage $message="tm-new-tiddler" type="text/markdown"/> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/plugins/tiddlywiki/markdown/images/new-markdown-button}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"><$text text={{$:/language/Buttons/NewMarkdown/Caption}}/></span> -</$list> +<%endif%> </$button> diff --git a/plugins/tiddlywiki/tiddlyweb/save-wiki-button.tid b/plugins/tiddlywiki/tiddlyweb/save-wiki-button.tid index ed4c042c7..63ddfc19e 100644 --- a/plugins/tiddlywiki/tiddlyweb/save-wiki-button.tid +++ b/plugins/tiddlywiki/tiddlyweb/save-wiki-button.tid @@ -9,12 +9,12 @@ $:/config/PageControlButtons/Visibility/$(listItem)$ \end <$button popup=<<qualify "$:/state/popup/save-wiki">> tooltip="Status of synchronisation with server" aria-label="Server status" class=<<tv-config-toolbar-class>> selectedClass="tc-selected"> <span class="tc-dirty-indicator"> -<$list filter="[<tv-config-toolbar-icons>match[yes]]"> +<%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/plugins/tiddlywiki/tiddlyweb/icon/cloud}} -</$list> -<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<%endif%> +<%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"><$text text="Server status"/></span> -</$list> +<%endif%> </span> </$button> <$reveal state=<<qualify "$:/state/popup/save-wiki">> type="popup" position="belowleft" animate="yes"> From d7b00a6dd0074c79a657f92acf528b0e3883edc7 Mon Sep 17 00:00:00 2001 From: Leilei332 <LeiYiXia29@outlook.com> Date: Tue, 10 Sep 2024 21:33:10 +0800 Subject: [PATCH 38/82] Make overflowed content scrollable (#8524) * Make overflowed content scrollable * Fix removed tab --- themes/tiddlywiki/vanilla/base.tid | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/themes/tiddlywiki/vanilla/base.tid b/themes/tiddlywiki/vanilla/base.tid index 65c1a5fe3..b24b35cf2 100644 --- a/themes/tiddlywiki/vanilla/base.tid +++ b/themes/tiddlywiki/vanilla/base.tid @@ -1350,6 +1350,10 @@ canvas.tc-edit-bitmapeditor { display: block; } +.tc-tiddler-body { + overflow-x: auto; +} + .tc-single-tiddler-window .tc-tiddler-body, .tc-tiddler-frame .tc-tiddler-body { font-size: {{$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize}}; @@ -2220,6 +2224,7 @@ html body.tc-body.tc-single-tiddler-window { .tc-tab-content { margin-top: 14px; + overflow-x: auto; } .tc-tab-content.tc-vertical { From 4f4e0550917fa3f266add8db7eb6ee649ed92c25 Mon Sep 17 00:00:00 2001 From: Mario Pietsch <pmariojo@gmail.com> Date: Tue, 10 Sep 2024 17:30:59 +0200 Subject: [PATCH 39/82] Add a search button to the control panel tiddler fields tab (#8157) * add a search button to the control panel tiddler fields tab * minor update * use v5.3.x syntax * use tf. prefix for the function * make show-filter-count a global macro * make table header translatable * add documentation * show-filter-count code cleanup * remove the table-header * remove erroneous caption field --- core/ui/ControlPanel/Basics.tid | 17 +--------- core/wiki/allfields.tid | 33 ++++++++++++++----- core/wiki/macros/show-filter-count.tid | 17 ++++++++++ .../tiddlers/macros/show-filter-count.tid | 21 ++++++++++++ 4 files changed, 64 insertions(+), 24 deletions(-) create mode 100644 core/wiki/macros/show-filter-count.tid create mode 100644 editions/tw5.com/tiddlers/macros/show-filter-count.tid diff --git a/core/ui/ControlPanel/Basics.tid b/core/ui/ControlPanel/Basics.tid index 961cbe161..f494c2af6 100644 --- a/core/ui/ControlPanel/Basics.tid +++ b/core/ui/ControlPanel/Basics.tid @@ -2,22 +2,7 @@ title: $:/core/ui/ControlPanel/Basics tags: $:/tags/ControlPanel/Info caption: {{$:/language/ControlPanel/Basics/Caption}} -\define lingo-base() $:/language/ControlPanel/Basics/ - -\define show-filter-count(filter) -\whitespace trim -<$button class="tc-btn-invisible"> -<$action-setfield $tiddler="$:/temp/advancedsearch" $value="""$filter$"""/> -<$action-setfield $tiddler="$:/temp/advancedsearch/input" $value="""$filter$"""/> -<$action-setfield $tiddler="$:/temp/advancedsearch/refresh" text="yes"/> -<$action-setfield $tiddler="$:/state/tab--1498284803" $value="$:/core/ui/AdvancedSearch/Filter"/> -<$action-navigate $to="$:/AdvancedSearch"/> -<$action-sendmessage $message="tm-focus-selector" $param=".tc-advanced-search input"/> -''<$count filter="""$filter$"""/>'' - -{{$:/core/images/advanced-search-button}} -</$button> -\end +\procedure lingo-base() $:/language/ControlPanel/Basics/ \whitespace trim |tc-max-width tc-edit-max-width|k diff --git a/core/wiki/allfields.tid b/core/wiki/allfields.tid index f148640d4..8f59a317f 100644 --- a/core/wiki/allfields.tid +++ b/core/wiki/allfields.tid @@ -1,13 +1,30 @@ title: $:/snippets/allfields -\define renderfield(title) -<tr class="tc-view-field"><td class="tc-view-field-name">''<$text text=<<__title__>>/>'':</td><td class="tc-view-field-value">//{{$:/language/Docs/Fields/$title$}}//</td></tr> -\end \whitespace trim + +\procedure lingo-base() $:/language/Docs/Fields/ + +\function tf.getLingoText() [<lingo-base>] [<title>] +[join[]get[text]] + +\procedure renderfield(title) +<tr class="tc-view-field"> + <td class="tc-view-field-name"> + ''<$text text=<<title>>/>'': + </td> + <td class="tc-view-field-value"> + //<<tf.getLingoText>>// + </td> + <td class="tc-view-field-list"> + <$macrocall $name="show-filter-count" filter=`[has[$(title)$]sort[]]`>> + </td> +</tr> +\end + <table class="tc-view-field-table"> -<tbody> -<$list filter="[fields[]sort[title]]" variable="listItem"> -<$macrocall $name="renderfield" title=<<listItem>>/> -</$list> -</tbody> + <tbody> + <!-- <<renderfieldHeader>> --> + <$list filter="[fields[]sort[title]]" variable="listItem"> + <$macrocall $name="renderfield" title=<<listItem>>/> + </$list> + </tbody> </table> diff --git a/core/wiki/macros/show-filter-count.tid b/core/wiki/macros/show-filter-count.tid new file mode 100644 index 000000000..be06fcde1 --- /dev/null +++ b/core/wiki/macros/show-filter-count.tid @@ -0,0 +1,17 @@ +title: $:/core/macros/show-filter-count +tags: $:/tags/Macro $:/tags/Global + +\whitespace trim + +\procedure show-filter-count(filter) +<$button class="tc-btn-invisible"> + <$action-setfield $tiddler="$:/temp/advancedsearch" $value=<<filter>>/> + <$action-setfield $tiddler="$:/temp/advancedsearch/input" $value=<<filter>>/> + <$action-setfield $tiddler="$:/temp/advancedsearch/refresh" text="yes"/> + <$action-setfield $tiddler="$:/state/tab--1498284803" $value="$:/core/ui/AdvancedSearch/Filter"/> + <$action-navigate $to="$:/AdvancedSearch"/> + <$action-sendmessage $message="tm-focus-selector" $param=".tc-advanced-search input"/> + <span class="tc-small-gap-right">''<$count filter=<<filter>>/>''</span> + {{$:/core/images/advanced-search-button}} +</$button> +\end \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/macros/show-filter-count.tid b/editions/tw5.com/tiddlers/macros/show-filter-count.tid new file mode 100644 index 000000000..7e026a590 --- /dev/null +++ b/editions/tw5.com/tiddlers/macros/show-filter-count.tid @@ -0,0 +1,21 @@ + +created: 20240804143842924 +modified: 20240804150223291 +tags: Macros [[Core Macros]] +title: show-filter-count Macro +type: text/vnd.tiddlywiki + +<<.from-version "5.3.6">> -- The <<.def show-filter-count>> [[macro|Macros]] creates an element, that shows a counter and a button to open the provided filter string in $:/AdvancedSearch + +!! Parameters + +; filter +: Needs to be a valid [[filter run|Filters]] + +!! Examples + +<<wikitext-example-without-html src:"""<<show-filter-count filter:"[tag[HelloThere]]">> -- The number and the icon is click-able""">> + +<<wikitext-example-without-html src:"""<<show-filter-count filter:"[has[author]sort[]]">> -- The number and the icon is click-able""">> + +Also see: [[$:/core/ui/ControlPanel/TiddlerFields]] From 232cffb0a1e6c7527fa894285a3f43daca9df1ca Mon Sep 17 00:00:00 2001 From: Mario Pietsch <pmariojo@gmail.com> Date: Tue, 10 Sep 2024 18:13:09 +0200 Subject: [PATCH 40/82] Add type "number: (default)" to compare operator (#8160) * Add type "number: (default)" to compare operator * Update compare Operator.tid * Update compare Operator (Examples).tid * Update compare Operator (Examples).tid --- .../tiddlers/filters/compare Operator.tid | 18 +++++++++--------- .../examples/compare Operator (Examples).tid | 1 + 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/editions/tw5.com/tiddlers/filters/compare Operator.tid b/editions/tw5.com/tiddlers/filters/compare Operator.tid index debf09ead..b86e8c729 100644 --- a/editions/tw5.com/tiddlers/filters/compare Operator.tid +++ b/editions/tw5.com/tiddlers/filters/compare Operator.tid @@ -1,15 +1,15 @@ +caption: compare created: 20200412181551706 modified: 20200412181551706 +op-input: a [[selection of titles|Title Selection]] +op-neg-output: those input titles <<.em not>> matching the specified comparison +op-output: those input titles matching the specified comparison +op-parameter: the value to compare +op-purpose: filter the input by comparing each item against the parameter +op-suffix: the <<.op compare>> operator uses a rich suffix, see below for details tags: [[Filter Operators]] [[Mathematics Operators]] [[String Operators]] [[Negatable Operators]] title: compare Operator type: text/vnd.tiddlywiki -caption: compare -op-purpose: filter the input by comparing each item against the parameter -op-input: a [[selection of titles|Title Selection]] -op-suffix: the <<.op compare>> operator uses a rich suffix, see below for details -op-parameter: the value to compare -op-output: those input titles matching the specified comparison -op-neg-output: those input titles <<.em not>> matching the specified comparison <<.from-version "5.1.22">>The <<.op compare>> filter allows numerical, string and date comparisons to be performed. @@ -21,7 +21,7 @@ The <<.op compare>> operator uses an extended syntax to specify all the options: The ''type'' can be: -* "number" - invalid numbers are interpreted as zero +* "number" - (default) invalid numbers are interpreted as zero * "integer" - invalid integers are interpreted as zero * "string" * "date" - invalid dates are interpreted as 1st January 1970 @@ -43,7 +43,7 @@ For example: ``` [[2]compare:number:eq[3]] returns nothing [[2]compare:number:lt[3]] returns "2" -[[2]compare:number:eq[2]] returns "2" +[[2]compare::eq[2]] returns "2" ``` Note that several of the variants of the <<.op compare>> operator are synonyms for existing operators, and are provided in the interests of consistency. For example, `compare:string:eq[x]` is a synonym for `match[x]`. diff --git a/editions/tw5.com/tiddlers/filters/examples/compare Operator (Examples).tid b/editions/tw5.com/tiddlers/filters/examples/compare Operator (Examples).tid index f729dc5d2..76488503a 100644 --- a/editions/tw5.com/tiddlers/filters/examples/compare Operator (Examples).tid +++ b/editions/tw5.com/tiddlers/filters/examples/compare Operator (Examples).tid @@ -9,3 +9,4 @@ type: text/vnd.tiddlywiki <<.operator-example 3 "[list[Days of the Week]compare:string:gt[M]compare:string:lt[W]]">> <<.operator-example 4 "[[v5.1.23-prerelease]compare:version:gt[v5.1.22]]">> <<.operator-example 5 "[[1]compare:number:gt[2]then[yes]else[no]]">> +<<.operator-example 6 "[[-2]compare::lt[-1]]">> From ffbef16152092df5ad74fb170d85b92439d90b2a Mon Sep 17 00:00:00 2001 From: Mario Pietsch <pmariojo@gmail.com> Date: Tue, 10 Sep 2024 18:13:58 +0200 Subject: [PATCH 41/82] ViewTemplate toolbar add, change aria-label to hint so it is more descriptive (#8323) --- core/ui/EditToolbar/delete.tid | 18 +++++++++++------- core/ui/ViewToolbar/clone.tid | 23 ++++++++++++++--------- core/ui/ViewToolbar/close.tid | 22 +++++++++++++--------- core/ui/ViewToolbar/edit.tid | 22 +++++++++++++--------- 4 files changed, 51 insertions(+), 34 deletions(-) diff --git a/core/ui/EditToolbar/delete.tid b/core/ui/EditToolbar/delete.tid index bdc6731b9..1e6451da1 100644 --- a/core/ui/EditToolbar/delete.tid +++ b/core/ui/EditToolbar/delete.tid @@ -4,11 +4,15 @@ caption: {{$:/core/images/delete-button}} {{$:/language/Buttons/Delete/Caption}} description: {{$:/language/Buttons/Delete/Hint}} \whitespace trim -<$button actions=<<cancel-delete-tiddler-actions "delete">> tooltip={{$:/language/Buttons/Delete/Hint}} aria-label={{$:/language/Buttons/Delete/Caption}} class=<<tv-config-toolbar-class>>> -<%if [<tv-config-toolbar-icons>match[yes]] %> -{{$:/core/images/delete-button}} -<%endif%> -<%if [<tv-config-toolbar-text>match[yes]] %> -<span class="tc-btn-text"><$text text={{$:/language/Buttons/Delete/Caption}}/></span> -<%endif%> +<$button actions=<<cancel-delete-tiddler-actions "delete">> + tooltip={{$:/language/Buttons/Delete/Hint}} + aria-label={{$:/language/Buttons/Delete/Hint}} + class=<<tv-config-toolbar-class>> +> + <%if [<tv-config-toolbar-icons>match[yes]] %> + {{$:/core/images/delete-button}} + <%endif%> + <%if [<tv-config-toolbar-text>match[yes]] %> + <span class="tc-btn-text"><$text text={{$:/language/Buttons/Delete/Caption}}/></span> + <%endif%> </$button> diff --git a/core/ui/ViewToolbar/clone.tid b/core/ui/ViewToolbar/clone.tid index abe01eda8..a4066fc00 100644 --- a/core/ui/ViewToolbar/clone.tid +++ b/core/ui/ViewToolbar/clone.tid @@ -4,13 +4,18 @@ caption: {{$:/core/images/clone-button}} {{$:/language/Buttons/Clone/Caption}} description: {{$:/language/Buttons/Clone/Hint}} \whitespace trim -<$button message="tm-new-tiddler" param=<<currentTiddler>> tooltip={{$:/language/Buttons/Clone/Hint}} aria-label={{$:/language/Buttons/Clone/Caption}} class=<<tv-config-toolbar-class>>> -<%if [<tv-config-toolbar-icons>match[yes]] %> -{{$:/core/images/clone-button}} -<%endif%> -<%if [<tv-config-toolbar-text>match[yes]] %> -<span class="tc-btn-text"> -<$text text={{$:/language/Buttons/Clone/Caption}}/> -</span> -<%endif%> +<$button message="tm-new-tiddler" + param=<<currentTiddler>> + tooltip={{$:/language/Buttons/Clone/Hint}} + aria-label={{$:/language/Buttons/Clone/Hint}} + class=<<tv-config-toolbar-class>> +> + <%if [<tv-config-toolbar-icons>match[yes]] %> + {{$:/core/images/clone-button}} + <%endif%> + <%if [<tv-config-toolbar-text>match[yes]] %> + <span class="tc-btn-text"> + <$text text={{$:/language/Buttons/Clone/Caption}}/> + </span> + <%endif%> </$button> \ No newline at end of file diff --git a/core/ui/ViewToolbar/close.tid b/core/ui/ViewToolbar/close.tid index da4db1e26..fcc53cef0 100644 --- a/core/ui/ViewToolbar/close.tid +++ b/core/ui/ViewToolbar/close.tid @@ -4,13 +4,17 @@ caption: {{$:/core/images/close-button}} {{$:/language/Buttons/Close/Caption}} description: {{$:/language/Buttons/Close/Hint}} \whitespace trim -<$button message="tm-close-tiddler" tooltip={{$:/language/Buttons/Close/Hint}} aria-label={{$:/language/Buttons/Close/Caption}} class=<<tv-config-toolbar-class>>> -<%if [<tv-config-toolbar-icons>match[yes]] %> -{{$:/core/images/close-button}} -<%endif%> -<%if [<tv-config-toolbar-text>match[yes]] %> -<span class="tc-btn-text"> -<$text text={{$:/language/Buttons/Close/Caption}}/> -</span> -<%endif%> +<$button message="tm-close-tiddler" + tooltip={{$:/language/Buttons/Close/Hint}} + aria-label={{$:/language/Buttons/Close/Caption}} + class=<<tv-config-toolbar-class>> +> + <%if [<tv-config-toolbar-icons>match[yes]] %> + {{$:/core/images/close-button}} + <%endif%> + <%if [<tv-config-toolbar-text>match[yes]] %> + <span class="tc-btn-text"> + <$text text={{$:/language/Buttons/Close/Caption}}/> + </span> + <%endif%> </$button> \ No newline at end of file diff --git a/core/ui/ViewToolbar/edit.tid b/core/ui/ViewToolbar/edit.tid index 38827aa14..730fd6ed5 100644 --- a/core/ui/ViewToolbar/edit.tid +++ b/core/ui/ViewToolbar/edit.tid @@ -4,13 +4,17 @@ caption: {{$:/core/images/edit-button}} {{$:/language/Buttons/Edit/Caption}} description: {{$:/language/Buttons/Edit/Hint}} \whitespace trim -<$button message="tm-edit-tiddler" tooltip={{$:/language/Buttons/Edit/Hint}} aria-label={{$:/language/Buttons/Edit/Caption}} class=<<tv-config-toolbar-class>>> -<%if [<tv-config-toolbar-icons>match[yes]] %> -{{$:/core/images/edit-button}} -<%endif%> -<%if [<tv-config-toolbar-text>match[yes]] %> -<span class="tc-btn-text"> -<$text text={{$:/language/Buttons/Edit/Caption}}/> -</span> -<%endif%> +<$button message="tm-edit-tiddler" + tooltip={{$:/language/Buttons/Edit/Hint}} + aria-label={{$:/language/Buttons/Edit/Hint}} + class=<<tv-config-toolbar-class>> +> + <%if [<tv-config-toolbar-icons>match[yes]] %> + {{$:/core/images/edit-button}} + <%endif%> + <%if [<tv-config-toolbar-text>match[yes]] %> + <span class="tc-btn-text"> + <$text text={{$:/language/Buttons/Edit/Caption}}/> + </span> + <%endif%> </$button> \ No newline at end of file From 753a8209456597976c5db845433ba6163ef5d5db Mon Sep 17 00:00:00 2001 From: Mario Pietsch <pmariojo@gmail.com> Date: Tue, 10 Sep 2024 18:14:29 +0200 Subject: [PATCH 42/82] Edittemplate toolbar improve accessibility (#8324) * change aria-label from caption to hint to make it more descriptive * add indentation --- core/ui/EditToolbar/cancel.tid | 18 +++++++++++------- core/ui/EditToolbar/save.tid | 2 +- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/core/ui/EditToolbar/cancel.tid b/core/ui/EditToolbar/cancel.tid index ca2248920..ae41fd4af 100644 --- a/core/ui/EditToolbar/cancel.tid +++ b/core/ui/EditToolbar/cancel.tid @@ -4,11 +4,15 @@ caption: {{$:/core/images/cancel-button}} {{$:/language/Buttons/Cancel/Caption}} description: {{$:/language/Buttons/Cancel/Hint}} \whitespace trim -<$button actions=<<cancel-delete-tiddler-actions "cancel">> tooltip={{$:/language/Buttons/Cancel/Hint}} aria-label={{$:/language/Buttons/Cancel/Caption}} class=<<tv-config-toolbar-class>>> -<%if [<tv-config-toolbar-icons>match[yes]] %> -{{$:/core/images/cancel-button}} -<%endif%> -<%if [<tv-config-toolbar-text>match[yes]] %> -<span class="tc-btn-text"><$text text={{$:/language/Buttons/Cancel/Caption}}/></span> -<%endif%> +<$button actions=<<cancel-delete-tiddler-actions "cancel">> + tooltip={{$:/language/Buttons/Cancel/Hint}} + aria-label={{$:/language/Buttons/Cancel/Hint}} + class=<<tv-config-toolbar-class>> +> + <%if [<tv-config-toolbar-icons>match[yes]] %> + {{$:/core/images/cancel-button}} + <%endif%> + <%if [<tv-config-toolbar-text>match[yes]] %> + <span class="tc-btn-text"><$text text={{$:/language/Buttons/Cancel/Caption}}/></span> + <%endif%> </$button> diff --git a/core/ui/EditToolbar/save.tid b/core/ui/EditToolbar/save.tid index b217806bb..d62daf981 100644 --- a/core/ui/EditToolbar/save.tid +++ b/core/ui/EditToolbar/save.tid @@ -8,7 +8,7 @@ description: {{$:/language/Buttons/Save/Hint}} <$fieldmangler> <$button tooltip={{$:/language/Buttons/Save/Hint}} - aria-label={{$:/language/Buttons/Save/Caption}} + aria-label={{$:/language/Buttons/Save/Hint}} class=<<tv-config-toolbar-class>> > <<save-tiddler-actions>> From 0c1d478e19ebf7ae44892b31f6f1e53a512f3fda Mon Sep 17 00:00:00 2001 From: Mario Pietsch <pmariojo@gmail.com> Date: Tue, 10 Sep 2024 18:15:17 +0200 Subject: [PATCH 43/82] Improve hellothere flex cards accessibility (#8325) * add alt-text field to image meta data files * add aria-label to some HelloThere links * improve flex-card procedure to render alt-text for images and aria-hide the new-badge because it causes problems * revert HelloThere modified date --- editions/tw5.com/tiddlers/hellothere/HelloThere.tid | 4 ++-- .../tiddlers/hellothere/badges/ProductHunt-Link.tid | 2 +- editions/tw5.com/tiddlers/images/Blurry Lawn.jpg.meta | 3 ++- .../tw5.com/tiddlers/images/Favicon template.svg.meta | 3 ++- editions/tw5.com/tiddlers/images/Funding.png.meta | 1 + .../tw5.com/tiddlers/images/Grok TiddlyWiki.png.meta | 1 + .../images/Introduction Video Thumbnail.jpg.meta | 1 + .../tiddlers/images/Marketplace Banner.png.meta | 1 + .../tw5.com/tiddlers/images/Motovun Jack.ascii.tid | 1 + .../tw5.com/tiddlers/images/Motovun Jack.jpg.meta | 1 + .../tw5.com/tiddlers/images/Motovun Jack.pdf.meta | 1 + .../tiddlers/images/New Release Banner.png.meta | 1 + .../tw5.com/tiddlers/images/Newnham Horizon.jpg.meta | 1 + .../tw5.com/tiddlers/images/Open Collective Logo.tid | 1 + editions/tw5.com/tiddlers/images/PerlinLight.jpg.meta | 1 + editions/tw5.com/tiddlers/images/Reddit Logo.tid | 1 + .../tw5.com/tiddlers/images/TWEUM Thumbnail.jpg.meta | 1 + .../tw5.com/tiddlers/images/Tiddler Fishes.svg.meta | 1 + .../tw5.com/tiddlers/images/Tiddler Poster.png.meta | 1 + .../tiddlers/images/TiddlyFox Apocalypse.png.meta | 1 + .../tiddlers/images/TiddlyWiki Classic.png.meta | 1 + .../images/TiddlyWiki Newsletter Badge.png.meta | 7 +++++-- .../tw5.com/tiddlers/images/TiddlyWikiLinks.png.meta | 1 + .../tw5.com/tiddlers/images/Tiddlyhost Logo.png.meta | 1 + .../tw5.com/tiddlers/images/Xememex Logo.svg.meta | 1 + editions/tw5.com/tiddlers/images/favicon.png.meta | 1 + .../tw5.com/tiddlers/images/green_favicon.png.meta | 1 + editions/tw5.com/tiddlers/system/wikitext-macros.tid | 11 ++++++++--- 28 files changed, 42 insertions(+), 10 deletions(-) diff --git a/editions/tw5.com/tiddlers/hellothere/HelloThere.tid b/editions/tw5.com/tiddlers/hellothere/HelloThere.tid index db719f1c0..8ceacfe24 100644 --- a/editions/tw5.com/tiddlers/hellothere/HelloThere.tid +++ b/editions/tw5.com/tiddlers/hellothere/HelloThere.tid @@ -9,7 +9,7 @@ type: text/vnd.tiddlywiki Use it to keep your [[to-do list|TaskManagementExample]], to plan an [[essay or novel|"TiddlyWiki for Scholars" by Alberto Molina]], or to organise your wedding. Record every thought that crosses your brain, or build a flexible and responsive website. -TiddlyWiki lets you choose where to keep your data, guaranteeing that in the decades to come you will [[still be able to use|Future Proof]] the notes you take today. +~TiddlyWiki lets you choose where to keep your data, guaranteeing that in the decades to come you will [[still be able to use|Future Proof]] the notes you take today. !! ''Quick Start'' @@ -19,7 +19,7 @@ TiddlyWiki lets you choose where to keep your data, guaranteeing that in the dec </$list> </div> <div class="tc-cards tc-small"> -<$link to="中文社区 - Chinese Community" class="tc-btn-big-green tc-card"> +<$link to="中文社区 - Chinese Community" class="tc-btn-big-green tc-card" aria-label="Chinese Community"> 中文社区<br/>Chinese Community </$link> </div> diff --git a/editions/tw5.com/tiddlers/hellothere/badges/ProductHunt-Link.tid b/editions/tw5.com/tiddlers/hellothere/badges/ProductHunt-Link.tid index 3554c2d74..2dd0a2912 100644 --- a/editions/tw5.com/tiddlers/hellothere/badges/ProductHunt-Link.tid +++ b/editions/tw5.com/tiddlers/hellothere/badges/ProductHunt-Link.tid @@ -1,4 +1,4 @@ title: Product Hunt Link tags: [[HelloThere Badge]] -<a href="https://www.producthunt.com/posts/tiddlywiki-2?utm_source=badge-top-post-badge&utm_medium=badge&utm_souce=badge-tiddlywiki-2" alt="Product Hunt: Product of the Day" target="_blank" rel="noopener noreferrer">{{ProductHunt-Badge.svg}}</a> \ No newline at end of file +<a href="https://www.producthunt.com/posts/tiddlywiki-2?utm_source=badge-top-post-badge&utm_medium=badge&utm_souce=badge-tiddlywiki-2" aria-label="Product Hunt: Product of the Day" target="_blank" rel="noopener noreferrer">{{ProductHunt-Badge.svg}}</a> \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/images/Blurry Lawn.jpg.meta b/editions/tw5.com/tiddlers/images/Blurry Lawn.jpg.meta index 2dc802bee..49b003bd2 100644 --- a/editions/tw5.com/tiddlers/images/Blurry Lawn.jpg.meta +++ b/editions/tw5.com/tiddlers/images/Blurry Lawn.jpg.meta @@ -1,4 +1,5 @@ title: Blurry Lawn.jpg type: image/jpeg tags: picture external-image -source: https://www.flickr.com/photos/jermy/16386332964/in/photostream \ No newline at end of file +source: https://www.flickr.com/photos/jermy/16386332964/in/photostream +alt-text: Blurry image with green grass with flowsers. diff --git a/editions/tw5.com/tiddlers/images/Favicon template.svg.meta b/editions/tw5.com/tiddlers/images/Favicon template.svg.meta index 8d6a1a197..9ad8a9f86 100644 --- a/editions/tw5.com/tiddlers/images/Favicon template.svg.meta +++ b/editions/tw5.com/tiddlers/images/Favicon template.svg.meta @@ -1,3 +1,4 @@ title: Favicon template.svg tags: picture -type: image/svg+xml \ No newline at end of file +type: image/svg+xml +alt-text: Motovun Jack with blue background. diff --git a/editions/tw5.com/tiddlers/images/Funding.png.meta b/editions/tw5.com/tiddlers/images/Funding.png.meta index b9caa4a72..8d6225a60 100644 --- a/editions/tw5.com/tiddlers/images/Funding.png.meta +++ b/editions/tw5.com/tiddlers/images/Funding.png.meta @@ -1,3 +1,4 @@ title: Funding.png type: image/png tags: picture +alt-text: Hand over a debit-card. diff --git a/editions/tw5.com/tiddlers/images/Grok TiddlyWiki.png.meta b/editions/tw5.com/tiddlers/images/Grok TiddlyWiki.png.meta index a0595cc9f..da5e252a2 100644 --- a/editions/tw5.com/tiddlers/images/Grok TiddlyWiki.png.meta +++ b/editions/tw5.com/tiddlers/images/Grok TiddlyWiki.png.meta @@ -1,3 +1,4 @@ title: Grok TiddlyWiki Banner type: image/png tags: picture +alt-text: Grok TiddlyWiki page and siluette of Motovun Jack. diff --git a/editions/tw5.com/tiddlers/images/Introduction Video Thumbnail.jpg.meta b/editions/tw5.com/tiddlers/images/Introduction Video Thumbnail.jpg.meta index ee1c94cd4..9b2a023c4 100644 --- a/editions/tw5.com/tiddlers/images/Introduction Video Thumbnail.jpg.meta +++ b/editions/tw5.com/tiddlers/images/Introduction Video Thumbnail.jpg.meta @@ -1,3 +1,4 @@ title: Introduction Video Thumbnail.jpg type: image/jpeg tags: picture +alt-text: Screenshot with a headline: TiddlyWiki. Below are several tiddlers randomly stacked. diff --git a/editions/tw5.com/tiddlers/images/Marketplace Banner.png.meta b/editions/tw5.com/tiddlers/images/Marketplace Banner.png.meta index b693c99e3..14ccdbc0b 100644 --- a/editions/tw5.com/tiddlers/images/Marketplace Banner.png.meta +++ b/editions/tw5.com/tiddlers/images/Marketplace Banner.png.meta @@ -1,3 +1,4 @@ title: TiddlyWiki Marketplace Banner type: image/jpeg tags: picture +alt-text: Motovun Jack with a shopping cart. Blue floor, orange background. diff --git a/editions/tw5.com/tiddlers/images/Motovun Jack.ascii.tid b/editions/tw5.com/tiddlers/images/Motovun Jack.ascii.tid index 115cf2e60..db5a9dc28 100644 --- a/editions/tw5.com/tiddlers/images/Motovun Jack.ascii.tid +++ b/editions/tw5.com/tiddlers/images/Motovun Jack.ascii.tid @@ -1,5 +1,6 @@ title: Motovun Jack.ascii tags: picture +alt-text: Motovun Jack ASCII-art. \rules only html <pre style="font-size:10px; font-family: monospace; line-height:13px"> diff --git a/editions/tw5.com/tiddlers/images/Motovun Jack.jpg.meta b/editions/tw5.com/tiddlers/images/Motovun Jack.jpg.meta index 43901f30f..ee2ddbe5b 100644 --- a/editions/tw5.com/tiddlers/images/Motovun Jack.jpg.meta +++ b/editions/tw5.com/tiddlers/images/Motovun Jack.jpg.meta @@ -2,3 +2,4 @@ title: Motovun Jack.jpg type: image/jpeg source: https://www.flickr.com/photos/jermy/6292279493/in/photostream tags: picture +alt-text: Motovun Jack on a stone wall with treas and hills in the background. diff --git a/editions/tw5.com/tiddlers/images/Motovun Jack.pdf.meta b/editions/tw5.com/tiddlers/images/Motovun Jack.pdf.meta index 27cb054c9..0a64294e5 100644 --- a/editions/tw5.com/tiddlers/images/Motovun Jack.pdf.meta +++ b/editions/tw5.com/tiddlers/images/Motovun Jack.pdf.meta @@ -1,3 +1,4 @@ title: Motovun Jack.pdf type: application/pdf tags: picture +alt-text: PDF reader with Motovun Jack siluette on a white background page 1 of 1. diff --git a/editions/tw5.com/tiddlers/images/New Release Banner.png.meta b/editions/tw5.com/tiddlers/images/New Release Banner.png.meta index e5fc745fe..2da8dc356 100644 --- a/editions/tw5.com/tiddlers/images/New Release Banner.png.meta +++ b/editions/tw5.com/tiddlers/images/New Release Banner.png.meta @@ -1,3 +1,4 @@ title: New Release Banner type: image/png tags: picture +alt-text: Release banner, with a custom background and a release version in big letters. diff --git a/editions/tw5.com/tiddlers/images/Newnham Horizon.jpg.meta b/editions/tw5.com/tiddlers/images/Newnham Horizon.jpg.meta index 4e5fb7d8b..8202f6a04 100644 --- a/editions/tw5.com/tiddlers/images/Newnham Horizon.jpg.meta +++ b/editions/tw5.com/tiddlers/images/Newnham Horizon.jpg.meta @@ -2,3 +2,4 @@ title: Newnham Horizon.jpg type: image/jpeg tags: picture external-image source: https://www.flickr.com/photos/jermy/289999155/in/photostream +alt-text: Newham Horizon. Green field, blue skey with some clouds on a sunny day. diff --git a/editions/tw5.com/tiddlers/images/Open Collective Logo.tid b/editions/tw5.com/tiddlers/images/Open Collective Logo.tid index 7dec4d62b..dbafad946 100644 --- a/editions/tw5.com/tiddlers/images/Open Collective Logo.tid +++ b/editions/tw5.com/tiddlers/images/Open Collective Logo.tid @@ -2,5 +2,6 @@ created: 20240621075644739 modified: 20240621075647009 tags: picture title: Open Collective Logo +alt-text: Open Collective Logo <svg style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2" viewBox="0 0 28 28"><path d="M25.509 6.026A13.934 13.934 0 0 1 28 14c0 2.963-.92 5.71-2.491 7.974l-3.626-3.627A8.96 8.96 0 0 0 23 14a8.964 8.964 0 0 0-1.117-4.347l3.626-3.627Z"/><path d="m21.974 2.49-3.627 3.628a9 9 0 1 0 0 15.765l3.627 3.626A13.934 13.934 0 0 1 14 27.999C6.268 28 0 21.733 0 14 0 6.269 6.268 0 14 0c2.963 0 5.711.922 7.974 2.492Z"/></svg> \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/images/PerlinLight.jpg.meta b/editions/tw5.com/tiddlers/images/PerlinLight.jpg.meta index 3df28f9c5..aff5d2b80 100644 --- a/editions/tw5.com/tiddlers/images/PerlinLight.jpg.meta +++ b/editions/tw5.com/tiddlers/images/PerlinLight.jpg.meta @@ -1,2 +1,3 @@ title: PerlinLight.jpg type: image/jpeg +alt-text: Backgournd tile with light gray dots randomly scatterd. diff --git a/editions/tw5.com/tiddlers/images/Reddit Logo.tid b/editions/tw5.com/tiddlers/images/Reddit Logo.tid index f4153ebb0..660785858 100644 --- a/editions/tw5.com/tiddlers/images/Reddit Logo.tid +++ b/editions/tw5.com/tiddlers/images/Reddit Logo.tid @@ -1,4 +1,5 @@ title: Reddit Logo +alt-text: Reddit Logo \parameters (size:"22pt") <svg width=<<size>> height=<<size>> viewBox="0 0 20 20"> diff --git a/editions/tw5.com/tiddlers/images/TWEUM Thumbnail.jpg.meta b/editions/tw5.com/tiddlers/images/TWEUM Thumbnail.jpg.meta index 8d35840cf..3ff7014fb 100644 --- a/editions/tw5.com/tiddlers/images/TWEUM Thumbnail.jpg.meta +++ b/editions/tw5.com/tiddlers/images/TWEUM Thumbnail.jpg.meta @@ -1,3 +1,4 @@ title: TWEUM Thumbnail.jpg type: image/jpeg tags: picture +alt-text: TW EU Meeting thumbnail. Skyline of Oxford on a sunny day with blue sky. Motovun Jack and a TiddlyWiki sceenshot in the back. diff --git a/editions/tw5.com/tiddlers/images/Tiddler Fishes.svg.meta b/editions/tw5.com/tiddlers/images/Tiddler Fishes.svg.meta index 257787b66..042c8a89d 100644 --- a/editions/tw5.com/tiddlers/images/Tiddler Fishes.svg.meta +++ b/editions/tw5.com/tiddlers/images/Tiddler Fishes.svg.meta @@ -1,3 +1,4 @@ title: Tiddler Fishes.svg type: image/svg+xml tags: picture +alt-text: 5 coloured sketched fish arranged in a cyrcle. diff --git a/editions/tw5.com/tiddlers/images/Tiddler Poster.png.meta b/editions/tw5.com/tiddlers/images/Tiddler Poster.png.meta index 2466871f0..221569974 100644 --- a/editions/tw5.com/tiddlers/images/Tiddler Poster.png.meta +++ b/editions/tw5.com/tiddlers/images/Tiddler Poster.png.meta @@ -2,3 +2,4 @@ title: Tiddler Poster.png type: image/png source: https://tiddlywiki.com/poster tags: picture +alt-text: Poster with a headline: Your messy thoughts. Organized. Below is an abstract Stickleback fish and tiddlywiki.com URL. diff --git a/editions/tw5.com/tiddlers/images/TiddlyFox Apocalypse.png.meta b/editions/tw5.com/tiddlers/images/TiddlyFox Apocalypse.png.meta index 2c3e7bab3..50d42ef49 100644 --- a/editions/tw5.com/tiddlers/images/TiddlyFox Apocalypse.png.meta +++ b/editions/tw5.com/tiddlers/images/TiddlyFox Apocalypse.png.meta @@ -1,3 +1,4 @@ title: TiddlyFox Apocalypse.png type: image/png tags: picture +alt-text: Motovun Jack's head with a FireFox logo over the head and a date: Nov. 14th 2017 on the left. diff --git a/editions/tw5.com/tiddlers/images/TiddlyWiki Classic.png.meta b/editions/tw5.com/tiddlers/images/TiddlyWiki Classic.png.meta index 4296f5116..0142e4d67 100644 --- a/editions/tw5.com/tiddlers/images/TiddlyWiki Classic.png.meta +++ b/editions/tw5.com/tiddlers/images/TiddlyWiki Classic.png.meta @@ -1,3 +1,4 @@ title: TiddlyWiki Classic.png type: image/png tags: picture +alt-text: TiddlyWiki classic screenshto thumbnail. diff --git a/editions/tw5.com/tiddlers/images/TiddlyWiki Newsletter Badge.png.meta b/editions/tw5.com/tiddlers/images/TiddlyWiki Newsletter Badge.png.meta index b53a63b97..3eb2dbdde 100644 --- a/editions/tw5.com/tiddlers/images/TiddlyWiki Newsletter Badge.png.meta +++ b/editions/tw5.com/tiddlers/images/TiddlyWiki Newsletter Badge.png.meta @@ -1,3 +1,6 @@ -title: TiddlyWiki Newsletter Badge.png -type: image/png +alt-text: Motovun Jack reads a Newsletter. +created: 20240630093143711 +modified: 20240630094906495 tags: picture +title: TiddlyWiki Newsletter Badge.png +type: image/png \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/images/TiddlyWikiLinks.png.meta b/editions/tw5.com/tiddlers/images/TiddlyWikiLinks.png.meta index 5ac185287..ebe0b79ba 100644 --- a/editions/tw5.com/tiddlers/images/TiddlyWikiLinks.png.meta +++ b/editions/tw5.com/tiddlers/images/TiddlyWikiLinks.png.meta @@ -1,3 +1,4 @@ title: TiddlyWikiLinks type: image/png tags: picture +alt-text: Motovun Jack body with "chain liks" around the neck. diff --git a/editions/tw5.com/tiddlers/images/Tiddlyhost Logo.png.meta b/editions/tw5.com/tiddlers/images/Tiddlyhost Logo.png.meta index c0f8f256a..7cae3e920 100644 --- a/editions/tw5.com/tiddlers/images/Tiddlyhost Logo.png.meta +++ b/editions/tw5.com/tiddlers/images/Tiddlyhost Logo.png.meta @@ -1,3 +1,4 @@ title: Tiddlyhost Logo type: image/png tags: picture +atl-text: TiddlyHost logo. \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/images/Xememex Logo.svg.meta b/editions/tw5.com/tiddlers/images/Xememex Logo.svg.meta index 1eab02541..19726a249 100644 --- a/editions/tw5.com/tiddlers/images/Xememex Logo.svg.meta +++ b/editions/tw5.com/tiddlers/images/Xememex Logo.svg.meta @@ -1,2 +1,3 @@ type: image/svg+xml title: Xememex Logo +alt-text Xememex Logo diff --git a/editions/tw5.com/tiddlers/images/favicon.png.meta b/editions/tw5.com/tiddlers/images/favicon.png.meta index 76d0be1a8..45e69d9e7 100644 --- a/editions/tw5.com/tiddlers/images/favicon.png.meta +++ b/editions/tw5.com/tiddlers/images/favicon.png.meta @@ -1,2 +1,3 @@ title: $:/favicon.ico type: image/png +alt-text: Motovun Jack with blue background. diff --git a/editions/tw5.com/tiddlers/images/green_favicon.png.meta b/editions/tw5.com/tiddlers/images/green_favicon.png.meta index 1f2a3ecc0..9c605b1e4 100644 --- a/editions/tw5.com/tiddlers/images/green_favicon.png.meta +++ b/editions/tw5.com/tiddlers/images/green_favicon.png.meta @@ -1,2 +1,3 @@ title: $:/green_favicon.ico type: image/png +alt-text: Motovun Jack with green background. diff --git a/editions/tw5.com/tiddlers/system/wikitext-macros.tid b/editions/tw5.com/tiddlers/system/wikitext-macros.tid index e4a898ad8..796f949a7 100644 --- a/editions/tw5.com/tiddlers/system/wikitext-macros.tid +++ b/editions/tw5.com/tiddlers/system/wikitext-macros.tid @@ -89,10 +89,13 @@ type: text/vnd.tiddlywiki \end \procedure flex-card(class,bordercolor:"",backgroundcolor:"",textcolor:"",imageField:"image",captionField:"caption",subtitle:"",descriptionField:"description",linkField:"link") -<$link class={{{ [<class>addprefix[tc-card ]] }}} to={{{ [<currentTiddler>get<linkField>else<currentTiddler>] }}}> +<$link class={{{ [<class>addprefix[tc-card ]] }}} + to={{{ [<currentTiddler>get<linkField>else<currentTiddler>] }}} + aria-label=<<currentTiddler>> +> <div class="tc-card-accent" style.borderTop={{{ [<bordercolor>!is[blank]addprefix[5px solid ]] }}} style.background={{!!background}} style.backgroundColor=<<backgroundcolor>> style.color=<<textcolor>> style.fill=<<textcolor>>> <$list filter="[<currentTiddler>has[ribbon-text]]" variable="ignore"> - <div class="tc-card-ribbon-wrapper"> + <div class="tc-card-ribbon-wrapper" aria-hidden="true"> <div class="tc-card-ribbon" style.backgroundColor={{{ [<currentTiddler>get[ribbon-color]else[red]] }}}> <div class="tc-card-ribbon-inner"> <$text text={{!!ribbon-text}}/> @@ -102,7 +105,9 @@ type: text/vnd.tiddlywiki </$list> <$list filter="[<currentTiddler>has<imageField>]" variable="ignore"> <div class="tc-card-image"> - <$image source={{{ [<currentTiddler>get<imageField>] }}}/> + <$image source={{{ [<currentTiddler>get<imageField>] }}} + alt={{{ [<currentTiddler>get<imageField>get[alt-text]else[Image.]] }}} + /> </div> </$list> <div class="tc-card-title"><$transclude field=<<captionField>>><$view field="title"/></$transclude></div> From c64bbd984f447ed23d6d76cd570434332f7a128f Mon Sep 17 00:00:00 2001 From: Mario Pietsch <pmariojo@gmail.com> Date: Tue, 10 Sep 2024 18:16:02 +0200 Subject: [PATCH 44/82] Re-activate tabs-macro test, rename expected-* files for easier maintenance (#8403) * re-activate tabs-macro test, rename expected-* files for easier maintenence * make sure the Recent tab in the browser is populated for easy testing --- .../expected-html-tabs-horizontal-all.tid | 5 -- .../expected-html-tabs-horizontal.tid | 5 -- .../expected-html-tabs-vertical.tid | 5 -- .../expected-test-tabs-horizontal-a.tid | 5 ++ .../expected-test-tabs-horizontal-all.tid | 5 ++ .../expected-test-tabs-vertical.tid | 5 ++ .../tests/test-wikitext-tabs-macro.js | 71 +++++++++---------- 7 files changed, 49 insertions(+), 52 deletions(-) delete mode 100644 editions/test/tiddlers/tests/data/tabs-macro/expected-html-tabs-horizontal-all.tid delete mode 100644 editions/test/tiddlers/tests/data/tabs-macro/expected-html-tabs-horizontal.tid delete mode 100644 editions/test/tiddlers/tests/data/tabs-macro/expected-html-tabs-vertical.tid create mode 100644 editions/test/tiddlers/tests/data/tabs-macro/expected-test-tabs-horizontal-a.tid create mode 100644 editions/test/tiddlers/tests/data/tabs-macro/expected-test-tabs-horizontal-all.tid create mode 100644 editions/test/tiddlers/tests/data/tabs-macro/expected-test-tabs-vertical.tid diff --git a/editions/test/tiddlers/tests/data/tabs-macro/expected-html-tabs-horizontal-all.tid b/editions/test/tiddlers/tests/data/tabs-macro/expected-html-tabs-horizontal-all.tid deleted file mode 100644 index 61f8d4971..000000000 --- a/editions/test/tiddlers/tests/data/tabs-macro/expected-html-tabs-horizontal-all.tid +++ /dev/null @@ -1,5 +0,0 @@ -title: expected-html-tabs-horizontal-all -type: text/html -description: Horizontal tabs with all parameters active. This is the expected HTML output from a test in test-wikitext-tabs-macro.js - -<p><div class="tc-tab-set "><div class="tc-tab-buttons "><button class="" role="switch">t 1</button><button aria-checked="true" class=" tc-tab-selected" role="switch">t 2</button><button class="" role="switch">desc</button><button class="" role="switch">TabFour</button></div><div class="tc-tab-divider "></div><div class="tc-tab-content "><div class=" tc-reveal" hidden="true"></div><div class=" tc-reveal"><h2 class=""><a class="tc-tiddlylink tc-tiddlylink-resolves" href="#TabTwo">TabTwo</a></h2><p><p>Text tab 2</p></p></div><div class=" tc-reveal" hidden="true"></div><div class=" tc-reveal" hidden="true"></div></div></div></p> \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/tabs-macro/expected-html-tabs-horizontal.tid b/editions/test/tiddlers/tests/data/tabs-macro/expected-html-tabs-horizontal.tid deleted file mode 100644 index 0d1f2a416..000000000 --- a/editions/test/tiddlers/tests/data/tabs-macro/expected-html-tabs-horizontal.tid +++ /dev/null @@ -1,5 +0,0 @@ -title: expected-html-tabs-horizontal -type: text/html -description: Horizontal tabs test - This is the expected HTML output from a test in test-wikitext-tabs-macro.js - -<p><div class="tc-tab-set "><div class="tc-tab-buttons "><button class="" role="switch">t 1</button><button aria-checked="true" class=" tc-tab-selected" role="switch">t 2</button><button class="" role="switch">t 3</button><button class="" role="switch">TabFour</button></div><div class="tc-tab-divider "></div><div class="tc-tab-content "><div class=" tc-reveal" hidden="true"></div><div class=" tc-reveal"><p>Text tab 2</p></div><div class=" tc-reveal" hidden="true"></div><div class=" tc-reveal" hidden="true"></div></div></div></p> \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/tabs-macro/expected-html-tabs-vertical.tid b/editions/test/tiddlers/tests/data/tabs-macro/expected-html-tabs-vertical.tid deleted file mode 100644 index c45891073..000000000 --- a/editions/test/tiddlers/tests/data/tabs-macro/expected-html-tabs-vertical.tid +++ /dev/null @@ -1,5 +0,0 @@ -title: expected-html-tabs-vertical -type: text/html -description: Vertical tabs test -- This is the expected HTML output from the test in test-wikitext-tabs-macro.js - -<p><div class="tc-tab-set tc-vertical"><div class="tc-tab-buttons tc-vertical"><button class="" role="switch">t 1</button><button aria-checked="true" class=" tc-tab-selected" role="switch">t 2</button><button class="" role="switch">t 3</button><button class="" role="switch">TabFour</button></div><div class="tc-tab-divider tc-vertical"></div><div class="tc-tab-content tc-vertical"><div class=" tc-reveal" hidden="true"></div><div class=" tc-reveal"><p>Text tab 2</p></div><div class=" tc-reveal" hidden="true"></div><div class=" tc-reveal" hidden="true"></div></div></div></p> \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/tabs-macro/expected-test-tabs-horizontal-a.tid b/editions/test/tiddlers/tests/data/tabs-macro/expected-test-tabs-horizontal-a.tid new file mode 100644 index 000000000..1cb356182 --- /dev/null +++ b/editions/test/tiddlers/tests/data/tabs-macro/expected-test-tabs-horizontal-a.tid @@ -0,0 +1,5 @@ +title: expected-test-tabs-horizontal-a +type: text/html +description: Horizontal tabs test - This is the expected HTML output from a test in test-wikitext-tabs-macro.js + +<p><div class="tc-tab-set "><div class="tc-tab-buttons "><button class="" data-tab-title="TabOne" role="switch">t 1</button><button aria-checked="true" class=" tc-tab-selected" data-tab-title="TabTwo" role="switch">t 2</button><button class="" data-tab-title="TabThree" role="switch">t 3</button><button class="" data-tab-title="TabFour" role="switch">TabFour</button></div><div class="tc-tab-divider "></div><div class="tc-tab-content "><div class=" tc-reveal" hidden="true"></div><div class=" tc-reveal"><p>Text tab 2</p></div><div class=" tc-reveal" hidden="true"></div><div class=" tc-reveal" hidden="true"></div></div></div></p> \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/tabs-macro/expected-test-tabs-horizontal-all.tid b/editions/test/tiddlers/tests/data/tabs-macro/expected-test-tabs-horizontal-all.tid new file mode 100644 index 000000000..418510172 --- /dev/null +++ b/editions/test/tiddlers/tests/data/tabs-macro/expected-test-tabs-horizontal-all.tid @@ -0,0 +1,5 @@ +title: expected-test-tabs-horizontal-all +type: text/html +description: Horizontal tabs with all parameters active. This is the expected HTML output from a test in test-wikitext-tabs-macro.js + +<p><div class="tc-tab-set "><div class="tc-tab-buttons "><button class="" data-tab-title="TabOne" role="switch">t 1</button><button aria-checked="true" class=" tc-tab-selected" data-tab-title="TabTwo" role="switch">t 2</button><button class="" data-tab-title="TabThree" role="switch">desc</button><button class="" data-tab-title="TabFour" role="switch">TabFour</button></div><div class="tc-tab-divider "></div><div class="tc-tab-content "><div class=" tc-reveal" hidden="true"></div><div class=" tc-reveal"><h2 class="">TabTwo</h2><p><p>Text tab 2</p></p></div><div class=" tc-reveal" hidden="true"></div><div class=" tc-reveal" hidden="true"></div></div></div></p> \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/tabs-macro/expected-test-tabs-vertical.tid b/editions/test/tiddlers/tests/data/tabs-macro/expected-test-tabs-vertical.tid new file mode 100644 index 000000000..3f1f344f9 --- /dev/null +++ b/editions/test/tiddlers/tests/data/tabs-macro/expected-test-tabs-vertical.tid @@ -0,0 +1,5 @@ +title: expected-test-tabs-vertical +type: text/html +description: Vertical tabs test -- This is the expected HTML output from the test in test-wikitext-tabs-macro.js + +<p><div class="tc-tab-set tc-vertical"><div class="tc-tab-buttons tc-vertical"><button class="" data-tab-title="TabOne" role="switch">t 1</button><button aria-checked="true" class=" tc-tab-selected" data-tab-title="TabTwo" role="switch">t 2</button><button class="" data-tab-title="TabThree" role="switch">t 3</button><button class="" data-tab-title="TabFour" role="switch">TabFour</button></div><div class="tc-tab-divider tc-vertical"></div><div class="tc-tab-content tc-vertical"><div class=" tc-reveal" hidden="true"></div><div class=" tc-reveal"><p>Text tab 2</p></div><div class=" tc-reveal" hidden="true"></div><div class=" tc-reveal" hidden="true"></div></div></div></p> \ No newline at end of file diff --git a/editions/test/tiddlers/tests/test-wikitext-tabs-macro.js b/editions/test/tiddlers/tests/test-wikitext-tabs-macro.js index 39f061d11..973f6fe66 100644 --- a/editions/test/tiddlers/tests/test-wikitext-tabs-macro.js +++ b/editions/test/tiddlers/tests/test-wikitext-tabs-macro.js @@ -1,7 +1,7 @@ /*\ title: test-wikitext-tabs-macro.js type: application/javascript -tags: [[$:/tags/test-spec-disabled]] +tags: [[$:/tags/test-spec]] Tests the core tabs macro by comparing the HTML output with a stored template. Intended to permit future readability improvements. @@ -17,70 +17,67 @@ Adding new functionality will probably change the "expected" html structure. describe("Tabs-macro HTML tests", function() { - var expected = $tw.wiki.getTiddler("expected-html-tabs-horizontal"), - expectedAll = $tw.wiki.getTiddler("expected-html-tabs-horizontal-all"), - expectedVert = $tw.wiki.getTiddler("expected-html-tabs-vertical"), +// This code can be copy pasted into the browser console for easy testing + + // the expected tiddlers can be found at ./data/tabs-macro/ + var expected = $tw.wiki.getTiddler("expected-test-tabs-horizontal-a"), + expectedAll = $tw.wiki.getTiddler("expected-test-tabs-horizontal-all"), + expectedVert = $tw.wiki.getTiddler("expected-test-tabs-vertical"), coreTabsTiddler = $tw.wiki.getTiddler("$:/core/macros/tabs"); - // Create a wiki - var wiki = new $tw.Wiki(); + // Create a wiki with test tiddlers // Add a couple of tiddlers - wiki.addTiddler({title: "TabOne", text: "Text tab 1", caption:"t 1"}); - wiki.addTiddler({title: "TabTwo", text: "Text tab 2", caption:"t 2"}); + $tw.wiki.addTiddler(new $tw.Tiddler({title: "TabOne", text: "Text tab 1", caption:"t 1"},$tw.wiki.getModificationFields())); + $tw.wiki.addTiddler(new $tw.Tiddler({title: "TabTwo", text: "Text tab 2", caption:"t 2"},$tw.wiki.getModificationFields())); // TabThree shows description used in button-template instead of caption - wiki.addTiddler({title: "TabThree", text: "Text tab 3", caption:"t 3", description:"desc"}); + $tw.wiki.addTiddler(new $tw.Tiddler({title: "TabThree", text: "Text tab 3", caption:"t 3", description:"desc"},$tw.wiki.getModificationFields())); // Tab Four has no caption field, so title will be used - wiki.addTiddler({title: "TabFour", text: "Text tab 4"}); + $tw.wiki.addTiddler(new $tw.Tiddler({title: "TabFour", text: "Text tab 4"},$tw.wiki.getModificationFields())); // Template tiddlers - wiki.addTiddler({ title: "body-template", - text: '!! <<currentTab>>\n\n<$transclude tiddler=<<currentTab>> mode="block"/>'}); - wiki.addTiddler({ title: "button-template", - text: '<$transclude tiddler=<<currentTab>> field="description"><$transclude tiddler=<<currentTab>> field="caption"><$macrocall $name="currentTab" $type="text/plain" $output="text/plain"/></$transclude></$transclude>'}); + $tw.wiki.addTiddler(new $tw.Tiddler({title: "body-template", "code-body":"yes", + text: '!! <<currentTab>>\n\n<$transclude tiddler=<<currentTab>> mode="block"/>'},$tw.wiki.getModificationFields())); + $tw.wiki.addTiddler(new $tw.Tiddler({title: "button-template", "code-body":"yes", + text: '<$transclude tiddler=<<currentTab>> field="description"><$transclude tiddler=<<currentTab>> field="caption"><$macrocall $name="currentTab" $type="text/plain" $output="text/plain"/></$transclude></$transclude>'},$tw.wiki.getModificationFields())); // tabs macro cloned, to be used with \\import - wiki.addTiddler({title: "tabs-macro-definition", text: coreTabsTiddler.fields.text}); + $tw.wiki.addTiddler(new $tw.Tiddler({title: "tabs-macro-definition", "code-body":"yes", text: coreTabsTiddler.fields.text},$tw.wiki.getModificationFields())); // horizontal tabs test uses `tabsList`, `default` and `state` -- unnamed params - wiki.addTiddler({title: "test-tabs-macro-horizontal", text: '\\import [[tabs-macro-definition]]\n<<tabs "TabOne TabTwo TabThree TabFour" "TabTwo" "$:/state/test-tab-01">>'}); + $tw.wiki.addTiddler(new $tw.Tiddler( + {title: "test-tabs-horizontal", text: '\\import [[tabs-macro-definition]]\n<<tabs "TabOne TabTwo TabThree TabFour" "TabTwo" "$:/state/test-tab-01">>'}, + $tw.wiki.getModificationFields()) + ); // horizontal tabs test adds `template`, `buttonTemplate` and `explicitState` as named params - wiki.addTiddler({title: "test-tabs-macro-horizontal-all", text: '\\import [[tabs-macro-definition]]\n<<tabs "TabOne TabTwo TabThree TabFour" "TabTwo" "$:/state/test-tab-01" template:"body-template" buttonTemplate:"button-template" explicitState:"$:/state/explicit">>'}); + $tw.wiki.addTiddler(new $tw.Tiddler( + {title: "test-tabs-horizontal-all", text: '\\import [[tabs-macro-definition]]\n<<tabs "TabOne TabTwo TabThree TabFour" "TabTwo" "$:/state/test-tab-01" template:"body-template" buttonTemplate:"button-template" explicitState:"$:/state/explicit">>'}, + $tw.wiki.getModificationFields()) + ); // vertical tabs test. Same params as test 1 - wiki.addTiddler({title: "test-tabs-macro-vertical", text: '\\import [[tabs-macro-definition]]\n<<tabs "TabOne TabTwo TabThree TabFour" "TabTwo" "$:/state/test-tab-02" "tc-vertical">>'}); + $tw.wiki.addTiddler(new $tw.Tiddler( + {title: "test-tabs-vertical", text: '\\import [[tabs-macro-definition]]\n<<tabs "TabOne TabTwo TabThree TabFour" "TabTwo" "$:/state/test-tab-02" "tc-vertical">>'}, + $tw.wiki.getModificationFields()) + ); + +// End This code can be copy pasted into the browser console /* ----------------- / Run the tests --------------------*/ // horizontal -/* - xit("should render horizontal tabs v5.2.1", function() { - expect(wiki.renderTiddler("text/html","test-tabs-macro-horizontal")).toBe(expected.fields.text); - }); - - xit("should render horizontal tabs macro with all parameters modified V5.2.1", function() { - expect(wiki.renderTiddler("text/html","test-tabs-macro-horizontal-all")).toBe(expectedAll.fields.text); - }); - - // vertical - xit("should render tabs vertical tabs v5.2.1", function() { - expect(wiki.renderTiddler("text/html","test-tabs-macro-vertical")).toBe(expectedVert.fields.text); - }); -*/ - // Future tests - // horizontal it("should render 'horizontal' tabs from v5.2.2 and up with whitespace trim", function() { - expect(wiki.renderTiddler("text/html","test-tabs-macro-horizontal")).toBe(expected.fields.text.replace(/\n/g,"")); + expect($tw.wiki.renderTiddler("text/html","test-tabs-horizontal")).toBe(expected.fields.text.replace(/\n/g,"")); }); it("should render all 'horizontal' tabs from v5.2.2 and up with whitespace trim", function() { - expect(wiki.renderTiddler("text/html","test-tabs-macro-horizontal-all")).toBe(expectedAll.fields.text.replace(/\n/g,"")); + expect($tw.wiki.renderTiddler("text/html","test-tabs-horizontal-all")).toBe(expectedAll.fields.text.replace(/\n/g,"")); }); // vertical it("should render 'vertical' tabs from v5.2.2 and up with whitespace trim", function() { - expect(wiki.renderTiddler("text/html","test-tabs-macro-vertical")).toBe(expectedVert.fields.text.replace(/\n/g,"")); + expect($tw.wiki.renderTiddler("text/html","test-tabs-vertical")).toBe(expectedVert.fields.text.replace(/\n/g,"")); }); }); From d450fce77b0592f1e7b6c19d778f6f6c3e85c60c Mon Sep 17 00:00:00 2001 From: Mario Pietsch <pmariojo@gmail.com> Date: Tue, 10 Sep 2024 18:17:28 +0200 Subject: [PATCH 45/82] Add trimSelection parameter to text editor (#7944) * add trimSelection - both, start, end, no * add documentation for trimSelection to tm-edit-text-operation tiddler * add trimSelection both to all buttions where it makes sense * change "both" to "yes" as a default * fix trimSelection typo * fix trimSelection typo * docs trimSelection add "no" as possible value - it's the default * remove some redundant variable declarations * update from-version * fix comment typos * fix whitespace * make local variables more visible --- .../editor/operations/text/wrap-selection.js | 136 ++++++++++++++---- core/ui/EditorToolbar/bold.tid | 1 + core/ui/EditorToolbar/italic.tid | 1 + core/ui/EditorToolbar/linkify.tid | 1 + core/ui/EditorToolbar/mono-line.tid | 1 + .../stamp-dropdown-item-template.tid | 2 +- core/ui/EditorToolbar/strikethrough.tid | 1 + core/ui/EditorToolbar/subscript.tid | 1 + core/ui/EditorToolbar/superscript.tid | 1 + core/ui/EditorToolbar/transcludify.tid | 1 + core/ui/EditorToolbar/underline.tid | 1 + .../WidgetMessage_ tm-edit-text-operation.tid | 30 ++-- 12 files changed, 138 insertions(+), 39 deletions(-) diff --git a/core/modules/editor/operations/text/wrap-selection.js b/core/modules/editor/operations/text/wrap-selection.js index 6800cbe5b..665d72eb4 100644 --- a/core/modules/editor/operations/text/wrap-selection.js +++ b/core/modules/editor/operations/text/wrap-selection.js @@ -13,37 +13,125 @@ Text editor operation to wrap the selection with the specified prefix and suffix "use strict"; exports["wrap-selection"] = function(event,operation) { - if(operation.selStart === operation.selEnd) { - // No selection; check if we're within the prefix/suffix - if(operation.text.substring(operation.selStart - event.paramObject.prefix.length,operation.selStart + event.paramObject.suffix.length) === event.paramObject.prefix + event.paramObject.suffix) { + var o = operation, + prefix = event.paramObject.prefix, + suffix = event.paramObject.suffix, + trimSelection = event.paramObject.trimSelection || "no", + selLength = o.selEnd - o.selStart; + + // This function detects, if trailing spaces are part of the selection __and__ if the user wants to handle them + // Returns "yes", "start", "end", "no" (default) + // yes .. there are trailing spaces at both ends + // start .. there are trailing spaces at the start + // end .. there are trailing spaces at the end + // no .. no trailing spaces are taken into account + var trailingSpaceAt = function(sel) { + var _start, + _end, + result; + // trimSelection is a user parameter, which this evaluations takes into account + switch(trimSelection) { + case "end": + result = (sel.trimEnd().length !== selLength) ? "end" : "no"; + break; + case "yes": + _start = sel.trimStart().length !== selLength; + _end = sel.trimEnd().length !== selLength; + result = (_start && _end) ? "yes" : (_start) ? "start" : (_end) ? "end" : "no"; + break; + case "start": + result = (sel.trimStart().length !== selLength) ? "start" : "no"; + break; + default: + result = "no"; + break; + } + return result; + } + + function togglePrefixSuffix() { + if(o.text.substring(o.selStart - prefix.length, o.selStart + suffix.length) === prefix + suffix) { // Remove the prefix and suffix - operation.cutStart = operation.selStart - event.paramObject.prefix.length; - operation.cutEnd = operation.selEnd + event.paramObject.suffix.length; - operation.replacement = ""; - operation.newSelStart = operation.cutStart; - operation.newSelEnd = operation.newSelStart; + o.cutStart = o.selStart - prefix.length; + o.cutEnd = o.selEnd + suffix.length; + o.replacement = ""; + o.newSelStart = o.cutStart; + o.newSelEnd = o.newSelStart; } else { // Wrap the cursor instead - operation.cutStart = operation.selStart; - operation.cutEnd = operation.selEnd; - operation.replacement = event.paramObject.prefix + event.paramObject.suffix; - operation.newSelStart = operation.selStart + event.paramObject.prefix.length; - operation.newSelEnd = operation.newSelStart; + o.cutStart = o.selStart; + o.cutEnd = o.selEnd; + o.replacement = prefix + suffix; + o.newSelStart = o.selStart + prefix.length; + o.newSelEnd = o.newSelStart; } - } else if(operation.text.substring(operation.selStart,operation.selStart + event.paramObject.prefix.length) === event.paramObject.prefix && operation.text.substring(operation.selEnd - event.paramObject.suffix.length,operation.selEnd) === event.paramObject.suffix) { + } + + // options: lenPrefix, lenSuffix + function removePrefixSuffix(options) { + options = options || {}; + var _lenPrefix = options.lenPrefix || 0; + var _lenSuffix = options.lenSuffix || 0; + + o.cutStart = o.selStart - _lenPrefix; + o.cutEnd = o.selEnd + _lenSuffix; + o.replacement = (_lenPrefix || _lenSuffix) ? o.selection : o.selection.substring(prefix.length, o.selection.length - suffix.length); + o.newSelStart = o.cutStart; + o.newSelEnd = o.cutStart + o.replacement.length; + } + + function addPrefixSuffix() { + // remove trailing space if requested + switch(trailingSpaceAt(o.selection)) { + case "no": + // has no trailing spaces + o.cutStart = o.selStart; + o.cutEnd = o.selEnd; + o.replacement = prefix + o.selection + suffix; + o.newSelStart = o.selStart; + o.newSelEnd = o.selStart + o.replacement.length; + break; + case "yes": + // handle both ends + o.cutStart = o.selEnd - (o.selection.trimStart().length); + o.cutEnd = o.selection.trimEnd().length + o.selStart; + o.replacement = prefix + o.selection.trim() + suffix; + o.newSelStart = o.cutStart; + o.newSelEnd = o.cutStart + o.replacement.length; + break; + case "start": + // handle leading + o.cutStart = o.selEnd - (o.selection.trimStart().length); + o.cutEnd = o.selEnd; + o.replacement = prefix + o.selection.trimStart() + suffix; + o.newSelStart = o.cutStart; + o.newSelEnd = o.cutStart + o.replacement.length; + break; + case "end": + // handle trailing + o.cutStart = o.selStart; + o.cutEnd = o.selection.trimEnd().length + o.selStart; + o.replacement = prefix + o.selection.trimEnd() + suffix; + o.newSelStart = o.selStart; + o.newSelEnd = o.selStart + o.replacement.length; + break; + } + } + + if(o.selStart === o.selEnd) { + // No selection; Create prefix and suffix. Set cursor in between them: ""|"" + togglePrefixSuffix(); + } else if(o.text.substring(o.selStart, o.selStart + prefix.length) === prefix && + o.text.substring(o.selEnd - suffix.length,o.selEnd) === suffix) { // Prefix and suffix are already present, so remove them - operation.cutStart = operation.selStart; - operation.cutEnd = operation.selEnd; - operation.replacement = operation.selection.substring(event.paramObject.prefix.length,operation.selection.length - event.paramObject.suffix.length); - operation.newSelStart = operation.selStart; - operation.newSelEnd = operation.selStart + operation.replacement.length; + removePrefixSuffix(); + } else if(o.text.substring(o.selStart - prefix.length, o.selStart) === prefix && + o.text.substring(o.selEnd, o.selEnd + suffix.length) === suffix) { + // Prefix and suffix are present BUT not selected -> remove them + removePrefixSuffix({"lenPrefix": prefix.length, "lenSuffix": suffix.length}); } else { // Add the prefix and suffix - operation.cutStart = operation.selStart; - operation.cutEnd = operation.selEnd; - operation.replacement = event.paramObject.prefix + operation.selection + event.paramObject.suffix; - operation.newSelStart = operation.selStart; - operation.newSelEnd = operation.selStart + operation.replacement.length; + addPrefixSuffix(); } }; diff --git a/core/ui/EditorToolbar/bold.tid b/core/ui/EditorToolbar/bold.tid index 1cde1be39..258b13d75 100644 --- a/core/ui/EditorToolbar/bold.tid +++ b/core/ui/EditorToolbar/bold.tid @@ -11,4 +11,5 @@ shortcuts: ((bold)) $param="wrap-selection" prefix="''" suffix="''" + trimSelection="yes" /> diff --git a/core/ui/EditorToolbar/italic.tid b/core/ui/EditorToolbar/italic.tid index 7f3505ddb..47c86b46d 100644 --- a/core/ui/EditorToolbar/italic.tid +++ b/core/ui/EditorToolbar/italic.tid @@ -11,4 +11,5 @@ shortcuts: ((italic)) $param="wrap-selection" prefix="//" suffix="//" + trimSelection="yes" /> diff --git a/core/ui/EditorToolbar/linkify.tid b/core/ui/EditorToolbar/linkify.tid index e8b5fed62..f500669ad 100644 --- a/core/ui/EditorToolbar/linkify.tid +++ b/core/ui/EditorToolbar/linkify.tid @@ -12,4 +12,5 @@ tags: $:/tags/EditorToolbar $param="wrap-selection" prefix="[[" suffix="]]" + trimSelection="yes" /> diff --git a/core/ui/EditorToolbar/mono-line.tid b/core/ui/EditorToolbar/mono-line.tid index 2df863171..cfad08e71 100644 --- a/core/ui/EditorToolbar/mono-line.tid +++ b/core/ui/EditorToolbar/mono-line.tid @@ -11,4 +11,5 @@ shortcuts: ((mono-line)) $param="wrap-selection" prefix="`" suffix="`" + trimSelection="yes" /> diff --git a/core/ui/EditorToolbar/stamp-dropdown-item-template.tid b/core/ui/EditorToolbar/stamp-dropdown-item-template.tid index 5e5acb162..cef3de8b0 100644 --- a/core/ui/EditorToolbar/stamp-dropdown-item-template.tid +++ b/core/ui/EditorToolbar/stamp-dropdown-item-template.tid @@ -21,7 +21,7 @@ title: $:/core/ui/EditorToolbar/StampDropdown/ItemTemplate $message="tm-edit-text-operation" $param="wrap-selection" prefix={{{ [<currentTiddler>addsuffix[/prefix]get[text]] }}} - suffix={{{ [<currentTiddler>addsuffix[/suffix]get[text]] }}} + suffix={{{ [<currentTiddler>addsuffix[/suffix]get[text]] }}} /> </$list> diff --git a/core/ui/EditorToolbar/strikethrough.tid b/core/ui/EditorToolbar/strikethrough.tid index 0b00df486..51dbbede2 100644 --- a/core/ui/EditorToolbar/strikethrough.tid +++ b/core/ui/EditorToolbar/strikethrough.tid @@ -11,4 +11,5 @@ shortcuts: ((strikethrough)) $param="wrap-selection" prefix="~~" suffix="~~" + trimSelection="yes" /> diff --git a/core/ui/EditorToolbar/subscript.tid b/core/ui/EditorToolbar/subscript.tid index 1c980a896..4be11ba54 100644 --- a/core/ui/EditorToolbar/subscript.tid +++ b/core/ui/EditorToolbar/subscript.tid @@ -11,4 +11,5 @@ shortcuts: ((subscript)) $param="wrap-selection" prefix=",," suffix=",," + trimSelection="yes" /> diff --git a/core/ui/EditorToolbar/superscript.tid b/core/ui/EditorToolbar/superscript.tid index ee4713409..02cb1176e 100644 --- a/core/ui/EditorToolbar/superscript.tid +++ b/core/ui/EditorToolbar/superscript.tid @@ -11,4 +11,5 @@ shortcuts: ((superscript)) $param="wrap-selection" prefix="^^" suffix="^^" + trimSelection="yes" /> diff --git a/core/ui/EditorToolbar/transcludify.tid b/core/ui/EditorToolbar/transcludify.tid index d24b2041c..61195ed1e 100644 --- a/core/ui/EditorToolbar/transcludify.tid +++ b/core/ui/EditorToolbar/transcludify.tid @@ -12,4 +12,5 @@ tags: $:/tags/EditorToolbar $param="wrap-selection" prefix="{{" suffix="}}" + trimSelection="yes" /> diff --git a/core/ui/EditorToolbar/underline.tid b/core/ui/EditorToolbar/underline.tid index 9f0fc9c30..9d4c4d151 100644 --- a/core/ui/EditorToolbar/underline.tid +++ b/core/ui/EditorToolbar/underline.tid @@ -11,4 +11,5 @@ shortcuts: ((underline)) $param="wrap-selection" prefix="__" suffix="__" + trimSelection="yes" /> diff --git a/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-edit-text-operation.tid b/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-edit-text-operation.tid index 72cc90381..9aaca9bf3 100644 --- a/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-edit-text-operation.tid +++ b/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-edit-text-operation.tid @@ -1,6 +1,6 @@ caption: tm-edit-text-operation created: 20160424211339792 -modified: 20230803045746596 +modified: 20240909083525060 tags: Messages title: WidgetMessage: tm-edit-text-operation type: text/vnd.tiddlywiki @@ -11,9 +11,9 @@ type: text/vnd.tiddlywiki Excises the currently selected text into a new tiddler and replaces it with a link, a macro or a transclude of the new tiddler. Parameters include: |!Name |!Description | -|title |Title of the new tiddler the selected content is excised to| -|type |Type of the replacement to be inserted: Can be one of <<.value "transclude">>, <<.value "link">> or <<.value "macro">>| -|macro |In case //type=<<.value "macro">>//, specifies the name of the macro to be inserted. The title of the new tiddler is provided as the first parameter to the macro. Defaults to the [[translink macro|translink Macro]]| +|title |Title of the new tiddler the selected content is excised to | +|type |Type of the replacement to be inserted: Can be one of <<.value "transclude">>, <<.value "link">> or <<.value "macro">> | +|macro |In case //type=<<.value "macro">>//, specifies the name of the macro to be inserted. The title of the new tiddler is provided as the first parameter to the macro. Defaults to the [[translink macro|translink Macro]] | |tagnew |If '<<.value "yes">>', will tag the new tiddler with the title of the tiddler currently being edited | </div> @@ -25,7 +25,7 @@ Excises the currently selected text into a new tiddler and replaces it with a li Replaces ''all'' contents of the editor with the provided text. |!Name |!Description | -|text |Text to be inserted| +|text |Text to be inserted | </div> \end @@ -36,7 +36,7 @@ Replaces ''all'' contents of the editor with the provided text. Replaces the current selection with the provided text. |!Name |!Description | -|text |Text to be inserted| +|text |Text to be inserted | </div> \end @@ -47,8 +47,8 @@ Replaces the current selection with the provided text. Prefixes the currently selected line//(s)// with the provided character. If a line is already prefixed by the provided prefix, the prefix is removed instead. |!Name |!Description | -|character |Prefix character| -|count |Number of characters that make up the prefix| +|character |Prefix character | +|count |Number of characters that make up the prefix | ''Example'' Setting //character="<<.value "!">>"// and //count="<<.value "3">>"// would insert the prefix "<<.value "!!!" >>", which will resolve to a subheading when parsed as WikiText. @@ -61,8 +61,8 @@ Prefixes the currently selected line//(s)// with the provided character. If a li Surrounds the selected //lines// with the provided <<.param "prefix">> and <<.param "suffix">>. |!Name |!Description | -|prefix |String to be prefixed to the selected lines| -|suffix |Suffix to be inserted after the selected lines| +|prefix |String to be prefixed to the selected lines | +|suffix |Suffix to be inserted after the selected lines | </div> @@ -75,8 +75,9 @@ Surrounds the selected //lines// with the provided <<.param "prefix">> and <<.pa Surrounds the current //selection// with the provided <<.param "prefix">> and <<.param "suffix">>. |!Name |!Description | -|prefix |String to be prefixed to the selection| -|suffix |Suffix to be inserted after the selection| +|prefix |String to be prefixed to the selection | +|suffix |Suffix to be inserted after the selection | +|trimSelection |<<.from-version 5.3.6>> Trim leading and trailing white-space from the selection and move it to the surrounding text. Possible values are: `yes`, `no` (default), `start` and `end` | </div> \end @@ -138,11 +139,11 @@ At this point the following text operations have been implemented: |<<.def "wrap-selection">>|<<wrapSelectionDescription>> | |<<.def "save-selection">>|<<saveSelectionDescription>> | |<<.def "make-link">>|<<makeLinkDescription>> | -|<<.def "insert-text">>|<<insertTextDescription>>| +|<<.def "insert-text">>|<<insertTextDescription>> | |<<.def "focus-editor">>|<<.from-version 5.2.0>> <<focusEditorDescription>> | -!Example +! Example An example can be seen in [[$:/core/ui/EditorToolbar/bold]]: @@ -152,6 +153,7 @@ An example can be seen in [[$:/core/ui/EditorToolbar/bold]]: $param="wrap-selection" prefix="''" suffix="''" + trimSelection="yes" /> ``` From 054be1af4ea512773e0cd5d10d92b832535761fe Mon Sep 17 00:00:00 2001 From: Mario Pietsch <pmariojo@gmail.com> Date: Tue, 10 Sep 2024 18:56:10 +0200 Subject: [PATCH 46/82] Add new reference tiddlers for the new v5.3.x concepts (#8164) --- editions/tw5.com/tiddlers/Core Classes.tid | 16 ++++++++++++++++ editions/tw5.com/tiddlers/Core Functions.tid | 8 ++++++++ editions/tw5.com/tiddlers/Core Messages.tid | 10 ++++++++++ editions/tw5.com/tiddlers/Core Procedures.tid | 8 ++++++++ editions/tw5.com/tiddlers/Core Widgets.tid | 10 ++++++++++ editions/tw5.com/tiddlers/concepts/Macros.tid | 4 ++-- editions/tw5.com/tiddlers/concepts/Messages.tid | 9 +++------ .../tw5.com/tiddlers/functions/Functions.tid | 4 ++-- editions/tw5.com/tiddlers/macros/CoreMacros.tid | 3 ++- .../tw5.com/tiddlers/procedures/Procedures.tid | 4 ++-- .../tiddlers/variables/Core Variables.tid | 7 ++++--- .../tw5.com/tiddlers/variables/Variables.tid | 4 ++-- .../tw5.com/tiddlers/widgets/Custom Widgets.tid | 4 ++-- editions/tw5.com/tiddlers/widgets/Widgets.tid | 6 ++---- 14 files changed, 73 insertions(+), 24 deletions(-) create mode 100644 editions/tw5.com/tiddlers/Core Classes.tid create mode 100644 editions/tw5.com/tiddlers/Core Functions.tid create mode 100644 editions/tw5.com/tiddlers/Core Messages.tid create mode 100644 editions/tw5.com/tiddlers/Core Procedures.tid create mode 100644 editions/tw5.com/tiddlers/Core Widgets.tid diff --git a/editions/tw5.com/tiddlers/Core Classes.tid b/editions/tw5.com/tiddlers/Core Classes.tid new file mode 100644 index 000000000..ea21246df --- /dev/null +++ b/editions/tw5.com/tiddlers/Core Classes.tid @@ -0,0 +1,16 @@ +created: 20240421142359127 +modified: 20240422090116239 +tags: Reference +title: Core Classes + +~TiddlyWiki class definitions are ''prefixed'' with `tc-` and are mainly used in the "vanilla base" theme. The ''tc-'' prefix ''is reserved'' for ~TiddlyWiki, so it should not be used for user defined classes. + +Users, especially plugin developers, should use their own prefixes eg: mytc- or something similar. + +The following info can also be found in the $:/ControlPanel ''-> Advanced -> Stylesheets'' tab + +All stylesheets used in this wiki are: <small>(shadow tiddlers are bold)</small> + +<<list-links filter:"[all[shadows+tiddlers]tag[$:/tags/Stylesheet]]">> + +Also see: [[Utility Classes]] \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/Core Functions.tid b/editions/tw5.com/tiddlers/Core Functions.tid new file mode 100644 index 000000000..cf9e6b300 --- /dev/null +++ b/editions/tw5.com/tiddlers/Core Functions.tid @@ -0,0 +1,8 @@ +created: 20240421144224104 +modified: 20240422090925417 +tags: Reference +title: Core Functions + +<!-- TODO Placeholder - Can be improved once the new "dumpvariables" macro is finished --> + +Also see: [[Functions]] \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/Core Messages.tid b/editions/tw5.com/tiddlers/Core Messages.tid new file mode 100644 index 000000000..597bc6643 --- /dev/null +++ b/editions/tw5.com/tiddlers/Core Messages.tid @@ -0,0 +1,10 @@ +created: 20240421144407522 +modified: 20240422091247905 +tags: Reference +title: Core Messages + +{{||Messages}} + +The following widget messages are implemented by the core: + +<<list-links filter:"[tag[Messages]]" class:"multi-columns">> \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/Core Procedures.tid b/editions/tw5.com/tiddlers/Core Procedures.tid new file mode 100644 index 000000000..ce2a01719 --- /dev/null +++ b/editions/tw5.com/tiddlers/Core Procedures.tid @@ -0,0 +1,8 @@ +created: 20240422090331513 +modified: 20240422090918289 +tags: Reference +title: Core Procedures + +<!-- TODO Placeholder - Can be improved once the new "dumpvariables" macro is finished --> + +Also see: [[Procedures]] \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/Core Widgets.tid b/editions/tw5.com/tiddlers/Core Widgets.tid new file mode 100644 index 000000000..c38a3e0c0 --- /dev/null +++ b/editions/tw5.com/tiddlers/Core Widgets.tid @@ -0,0 +1,10 @@ +created: 20240422083130158 +modified: 20240422083155753 +tags: Reference +title: Core Widgets + +{{Widgets}} + +The following classes of widget are built into the core: + +<<list-links "[tag[Widgets]]" class:"multi-columns">> \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/concepts/Macros.tid b/editions/tw5.com/tiddlers/concepts/Macros.tid index 884551996..e71f80077 100644 --- a/editions/tw5.com/tiddlers/concepts/Macros.tid +++ b/editions/tw5.com/tiddlers/concepts/Macros.tid @@ -1,6 +1,6 @@ created: 20140211171341271 -modified: 20230922094937115 -tags: Concepts Reference +modified: 20240422084520179 +tags: Concepts [[Core Macros]] title: Macros type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/concepts/Messages.tid b/editions/tw5.com/tiddlers/concepts/Messages.tid index 77c9df290..968a2509f 100644 --- a/editions/tw5.com/tiddlers/concepts/Messages.tid +++ b/editions/tw5.com/tiddlers/concepts/Messages.tid @@ -1,11 +1,8 @@ created: 20140226083311937 -modified: 20211117042057208 -tags: Concepts Reference +modified: 20240422091319082 +tags: Concepts [[Core Messages]] title: Messages type: text/vnd.tiddlywiki -Widget ''messages'' are generated by [[Widgets]] in response to user actions. Messages have a <<.param name>>, an optional primary <<.param parameter>>, and one or more optional named parameters. These messages travel up the widget tree where they are handled by ancestor widgets or the core itself. +Widget [[messages|Core Messages]] are generated by [[Widgets]] in response to user actions. Messages have a <<.param name>>, an optional primary <<.param parameter>>, and one or more optional named parameters. These messages travel up the widget tree where they are handled by ancestor widgets or the core itself. -The following widget messages are implemented by the core: - -<<list-links "[tag[Messages]]">> diff --git a/editions/tw5.com/tiddlers/functions/Functions.tid b/editions/tw5.com/tiddlers/functions/Functions.tid index 028747a34..0911fdd6d 100644 --- a/editions/tw5.com/tiddlers/functions/Functions.tid +++ b/editions/tw5.com/tiddlers/functions/Functions.tid @@ -1,6 +1,6 @@ created: 20221009124003601 -modified: 20240619211228560 -tags: Concepts Reference +modified: 20240422084850412 +tags: Concepts [[Core Functions]] title: Functions type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/macros/CoreMacros.tid b/editions/tw5.com/tiddlers/macros/CoreMacros.tid index 01879e3ac..2c46555f3 100644 --- a/editions/tw5.com/tiddlers/macros/CoreMacros.tid +++ b/editions/tw5.com/tiddlers/macros/CoreMacros.tid @@ -1,5 +1,6 @@ created: 20150220180315000 -modified: 20150221222052000 +modified: 20240422084600212 +tags: Reference title: Core Macros type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/procedures/Procedures.tid b/editions/tw5.com/tiddlers/procedures/Procedures.tid index 321284f93..1643fac18 100644 --- a/editions/tw5.com/tiddlers/procedures/Procedures.tid +++ b/editions/tw5.com/tiddlers/procedures/Procedures.tid @@ -1,6 +1,6 @@ created: 20221007124007426 -modified: 20240310173130052 -tags: Concepts Reference +modified: 20240422090349758 +tags: Concepts [[Core Procedures]] title: Procedures type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/variables/Core Variables.tid b/editions/tw5.com/tiddlers/variables/Core Variables.tid index ab19181eb..3b2fa070b 100644 --- a/editions/tw5.com/tiddlers/variables/Core Variables.tid +++ b/editions/tw5.com/tiddlers/variables/Core Variables.tid @@ -1,12 +1,13 @@ created: 20150220161908000 -modified: 20150228134138000 +modified: 20240421144847774 +tags: Reference title: Core Variables type: text/vnd.tiddlywiki The following [[variables|Variables]] are built into ~TiddlyWiki's core: -<<list-links "[tag[Core Variables]] -[tag[Configuration Variables]]">> +<<list-links filter:"[tag[Core Variables]] -[tag[Configuration Variables]]" class:"multi-columns">> The core will also use various configuration variables and macros if you define them: -<<list-links "[tag[Configuration Variables]]">> +<<list-links filter:"[tag[Configuration Variables]]" class:"multi-columns">> diff --git a/editions/tw5.com/tiddlers/variables/Variables.tid b/editions/tw5.com/tiddlers/variables/Variables.tid index 116f3c9a0..43387eb4f 100644 --- a/editions/tw5.com/tiddlers/variables/Variables.tid +++ b/editions/tw5.com/tiddlers/variables/Variables.tid @@ -1,6 +1,6 @@ created: 20141002133113496 -modified: 20230422150445336 -tags: Concepts Reference WikiText +modified: 20240422084347375 +tags: Concepts WikiText title: Variables type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/widgets/Custom Widgets.tid b/editions/tw5.com/tiddlers/widgets/Custom Widgets.tid index b8c48b2c3..847bdeed9 100644 --- a/editions/tw5.com/tiddlers/widgets/Custom Widgets.tid +++ b/editions/tw5.com/tiddlers/widgets/Custom Widgets.tid @@ -1,6 +1,6 @@ created: 20221007144237585 -modified: 20230921180332436 -tags: Concepts Reference +modified: 20240422084734129 +tags: Concepts title: Custom Widgets type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/widgets/Widgets.tid b/editions/tw5.com/tiddlers/widgets/Widgets.tid index 66793f47d..1b65189b4 100644 --- a/editions/tw5.com/tiddlers/widgets/Widgets.tid +++ b/editions/tw5.com/tiddlers/widgets/Widgets.tid @@ -1,6 +1,6 @@ created: 20140908130500000 -modified: 20240326164134356 -tags: Concepts Reference +modified: 20240422083334052 +tags: Concepts [[Core Widgets]] title: Widgets type: text/vnd.tiddlywiki @@ -14,6 +14,4 @@ Each class of widget contributes a specific ability to the overall functionality The more specialised widgets use a general-purpose [[widget syntax|Widgets in WikiText]] as their only possible WikiText representation. -The following classes of widget are built into the core: -<<list-links "[tag[Widgets]]" class:"multi-columns">> From a960e4f6589ffb05a024c72dd75aaa99952ea6e7 Mon Sep 17 00:00:00 2001 From: Michael McDermott <michaeljmcd@users.noreply.github.com> Date: Tue, 10 Sep 2024 09:57:06 -0700 Subject: [PATCH 47/82] Make Excision Available for Markdown (#8498) * Updates to make Excision more friendly to Markdown users by adding Markdown as an option in the criteria to use excision and by making the excise operation reuse the type of the tiddler being excised. * Updated excise operation to use Markdown syntax for links. --- core/modules/editor/operations/text/excise.js | 11 +++++++++-- core/ui/EditorToolbar/excise.tid | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/core/modules/editor/operations/text/excise.js b/core/modules/editor/operations/text/excise.js index 8cb3a8486..bb5840c2e 100644 --- a/core/modules/editor/operations/text/excise.js +++ b/core/modules/editor/operations/text/excise.js @@ -12,9 +12,14 @@ Text editor operation to excise the selection to a new tiddler /*global $tw: false */ "use strict"; +function isMarkdown(mediaType) { + return mediaType === 'text/markdown' || mediatype === 'text/x-markdown'; +} + exports["excise"] = function(event,operation) { var editTiddler = this.wiki.getTiddler(this.editTitle), editTiddlerTitle = this.editTitle, + wikiLinks = !isMarkdown(editTiddler.fields.type), excisionBaseTitle = $tw.language.getString("Buttons/Excise/DefaultTitle"); if(editTiddler && editTiddler.fields["draft.of"]) { editTiddlerTitle = editTiddler.fields["draft.of"]; @@ -26,7 +31,8 @@ exports["excise"] = function(event,operation) { { title: excisionTitle, text: operation.selection, - tags: event.paramObject.tagnew === "yes" ? [editTiddlerTitle] : [] + tags: event.paramObject.tagnew === "yes" ? [editTiddlerTitle] : [], + type: editTiddler.fields.type } )); operation.replacement = excisionTitle; @@ -35,7 +41,8 @@ exports["excise"] = function(event,operation) { operation.replacement = "{{" + operation.replacement+ "}}"; break; case "link": - operation.replacement = "[[" + operation.replacement+ "]]"; + operation.replacement = wikiLinks ? "[[" + operation.replacement+ "]]" + : ("[" + operation.replacement + "](<#" + operation.replacement + ">)"); break; case "macro": operation.replacement = "<<" + (event.paramObject.macro || "translink") + " \"\"\"" + operation.replacement + "\"\"\">>"; diff --git a/core/ui/EditorToolbar/excise.tid b/core/ui/EditorToolbar/excise.tid index fe5c5288b..8bb17edd5 100644 --- a/core/ui/EditorToolbar/excise.tid +++ b/core/ui/EditorToolbar/excise.tid @@ -3,7 +3,7 @@ tags: $:/tags/EditorToolbar icon: $:/core/images/excise caption: {{$:/language/Buttons/Excise/Caption}} description: {{$:/language/Buttons/Excise/Hint}} -condition: [<targetTiddler>type[]] [<targetTiddler>get[type]prefix[text/vnd.tiddlywiki]] +[first[]] +condition: [<targetTiddler>type[]] [<targetTiddler>type[text/vnd.tiddlywiki]] [<targetTiddler>type[text/markdown]] [<targetTiddler>type[text/x-markdown]] +[first[]] shortcuts: ((excise)) dropdown: $:/core/ui/EditorToolbar/excise-dropdown From d133c922b7efd22cb13d7616ec63d27c7507dd4d Mon Sep 17 00:00:00 2001 From: Jeremy Ruston <jeremy@jermolene.com> Date: Tue, 10 Sep 2024 18:59:31 +0100 Subject: [PATCH 48/82] Updated release note --- .../prerelease/tiddlers/Release 5.3.6.tid | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/editions/prerelease/tiddlers/Release 5.3.6.tid b/editions/prerelease/tiddlers/Release 5.3.6.tid index 211b360cb..40cca3478 100644 --- a/editions/prerelease/tiddlers/Release 5.3.6.tid +++ b/editions/prerelease/tiddlers/Release 5.3.6.tid @@ -32,6 +32,8 @@ This release includes improvements to the following translations: * <<.link-badge-improved "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8402">> readability of Markdown links to other tiddlers * <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8459">> image toolbar dropdown to editor toolbar * <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8492">> colour for target footnote background +* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8585">> settings tab +* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8498">> support for the excision tool ! TestCaseWidget and Related Improvements @@ -39,7 +41,7 @@ This release includes several fixes and improvements to the TestCaseWidget, its * <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8447">> new `$compound-filter` attribute for the DataWidget that allows other compound tiddlers to be imported. There is also a companion ''import-compound'' field for the TestCaseWidget template * <<.link-badge-improved "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8514">> the TestCaseWidget default template to make it more modular -* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8499">> support for an ''import'' field in the default TestCaseWidget template, allowing additional tiddlers to be imported +* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8499">> support for an ''import'' field in TestCaseTiddlers, allowing additional tiddlers to be imported * <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8416">> [[TestCaseWidget]] default template to allow wikitext within the test case narrative * <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8449">> WikiText formatting buttons when editing CompoundTiddlers * <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8450">> CompoundTiddlers type `text/vnd.tiddlywiki-multiple` to the editor type dropdown @@ -61,6 +63,9 @@ This release includes several fixes and improvements to the TestCaseWidget, its * <<.link-badge-added "github.com/TiddlyWiki/TiddlyWiki5/pull/8441">> support for social media cards to be added to TiddlyWiki * <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8518">> type attribute to input fields in control panel, allowing virtual keyboards to switch to the proper one when editing settings * <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8558">> empty message to tag picker, search dropdown and advanced search +* <<.link-badge-improved "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8524">> handling of tiddler content that horizontally overflows by adding scrollbars +* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8157">> a search button to the control panel tiddler fields tab +* <<.link-badge-improved "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8323">> (and <<.link-badge-here "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8324">>) the view and edit toolbars with more descriptive Aria labels ! Hackability Improvements @@ -70,6 +75,11 @@ This release includes several fixes and improvements to the TestCaseWidget, its * <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8384">> tests to ensure that the syntax elements `{% %}` and `{= =}` are reserved for external tooling, and will never be recognised by TiddlyWiki itself * <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8462">> new cascades for the view template subtitle and tags * <<.link-badge-improved "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8500">> excision tool implementation to make the excision tiddler title translatable +* <<.link-badge-improved "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8584">> editor toolbar buttons to use the new [[Conditional Shortcut Syntax]] +* <<.link-badge-improved "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8579">> page control toolbar buttons to use the new [[Conditional Shortcut Syntax]] +* <<.link-badge-improved "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8559">> [[WidgetMessage: tm-new-tiddler]] to allow tiddlers to be created with no tags field +* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/7941">> ''startCount'' parameter to [[unusedtitle Macro]] +* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/7944">> trimSelection parameter to [[WidgetMessage: tm-edit-text-operation]] ! Bug Fixes @@ -86,9 +96,15 @@ This release includes several fixes and improvements to the TestCaseWidget, its * <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/commit/38081b86c97a795420515156fcd52177574be516">> crash with filesystem adaptor if the wiki folder is missing * <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8413">> unwrapped oveflowed code blocks not showing scroll bars when setting "Wrap long lines in code blocks" to "No" in "Theme tweaks" * <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/7317">> (and <<.link-badge-here "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8552">>) search input box outline in Chrome-like browsers -* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/commit/fa423e508ff5012423a1904bb17c9d61848732ee">> interpretation of success codes in Put saver OPTIONS request -* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8485">> duplicated search result in advanced search if more than one tiddler is tagged with $:/tags/SearchResults -* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/commit/7dfdbae812306875bac2445ca4ee505b406e3be1">> crash with KeyboardWidget in startup actions +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8578">> problem with rapid typing in the advanced search filter tab +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8535">> crash with EditionsCommand if an edition directory does not have a [[tiddlywiki.info file|tiddlywiki.info Files]] +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/commit/b8fb9e6b21319e790e9aa7453ca265b0ed4898db">> DataWidget to allow title fields to be overwritten +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/commit/fa423e508ff5012423a1904bb17c9d61848732ee">> "Put Saver" to correctly interpret HTTP response codes +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8547">> invalid accept header in "Put Saver" +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8485">> duplicated search results in advanced search when more than one tiddlers are tagged with [[SystemTag: $:/tags/SearchResults]] +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/commit/7dfdbae812306875bac2445ca4ee505b406e3be1">> crash if the KeyboardWidget is used within a [[startup action|StartupActions]] +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8574">> suffix in the [[encodebase64 Operator]] and [[decodebase64 Operator]] +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8557">> overflow of floated elements ! Node.js Improvements @@ -112,6 +128,7 @@ hoelzro kookma Leilei332 linonetwo +michaeljmcd pmario PotOfCoffee2Go saqimtiaz @@ -120,4 +137,5 @@ springerspandrel twMat valpackett webplusai +wolfsprite """>> From 695e2ee5894277f78b8b8cf6d157a4121f4e9b5d Mon Sep 17 00:00:00 2001 From: Jeremy Ruston <jeremy@jermolene.com> Date: Tue, 10 Sep 2024 19:03:06 +0100 Subject: [PATCH 49/82] Revert "Make overflowed content scrollable (#8524)" This reverts commit d7b00a6dd0074c79a657f92acf528b0e3883edc7. --- editions/prerelease/tiddlers/Release 5.3.6.tid | 1 - themes/tiddlywiki/vanilla/base.tid | 5 ----- 2 files changed, 6 deletions(-) diff --git a/editions/prerelease/tiddlers/Release 5.3.6.tid b/editions/prerelease/tiddlers/Release 5.3.6.tid index 40cca3478..1d2c9b8b8 100644 --- a/editions/prerelease/tiddlers/Release 5.3.6.tid +++ b/editions/prerelease/tiddlers/Release 5.3.6.tid @@ -63,7 +63,6 @@ This release includes several fixes and improvements to the TestCaseWidget, its * <<.link-badge-added "github.com/TiddlyWiki/TiddlyWiki5/pull/8441">> support for social media cards to be added to TiddlyWiki * <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8518">> type attribute to input fields in control panel, allowing virtual keyboards to switch to the proper one when editing settings * <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8558">> empty message to tag picker, search dropdown and advanced search -* <<.link-badge-improved "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8524">> handling of tiddler content that horizontally overflows by adding scrollbars * <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8157">> a search button to the control panel tiddler fields tab * <<.link-badge-improved "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8323">> (and <<.link-badge-here "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8324">>) the view and edit toolbars with more descriptive Aria labels diff --git a/themes/tiddlywiki/vanilla/base.tid b/themes/tiddlywiki/vanilla/base.tid index b24b35cf2..65c1a5fe3 100644 --- a/themes/tiddlywiki/vanilla/base.tid +++ b/themes/tiddlywiki/vanilla/base.tid @@ -1350,10 +1350,6 @@ canvas.tc-edit-bitmapeditor { display: block; } -.tc-tiddler-body { - overflow-x: auto; -} - .tc-single-tiddler-window .tc-tiddler-body, .tc-tiddler-frame .tc-tiddler-body { font-size: {{$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize}}; @@ -2224,7 +2220,6 @@ html body.tc-body.tc-single-tiddler-window { .tc-tab-content { margin-top: 14px; - overflow-x: auto; } .tc-tab-content.tc-vertical { From bae2b78925bec393318eac082db97eb95159dbca Mon Sep 17 00:00:00 2001 From: Michael McDermott <michaeljmcd@users.noreply.github.com> Date: Wed, 11 Sep 2024 09:13:54 -0700 Subject: [PATCH 50/82] Added keyboard shortcut option for menubar search. (#8350) --- .../tiddlywiki/menubar/keyboardshortcuts-menubar-search.tid | 5 +++++ plugins/tiddlywiki/menubar/shortcutinfo-menubar-search.tid | 4 ++++ 2 files changed, 9 insertions(+) create mode 100644 plugins/tiddlywiki/menubar/keyboardshortcuts-menubar-search.tid create mode 100644 plugins/tiddlywiki/menubar/shortcutinfo-menubar-search.tid diff --git a/plugins/tiddlywiki/menubar/keyboardshortcuts-menubar-search.tid b/plugins/tiddlywiki/menubar/keyboardshortcuts-menubar-search.tid new file mode 100644 index 000000000..cb5fefb55 --- /dev/null +++ b/plugins/tiddlywiki/menubar/keyboardshortcuts-menubar-search.tid @@ -0,0 +1,5 @@ +key: ((menubar-search)) +tags: $:/tags/KeyboardShortcut +title: $:/core/ui/KeyboardShortcuts/menubar-search + +<$action-sendmessage $message="tm-focus-selector" $param=".tc-menubar input"/> diff --git a/plugins/tiddlywiki/menubar/shortcutinfo-menubar-search.tid b/plugins/tiddlywiki/menubar/shortcutinfo-menubar-search.tid new file mode 100644 index 000000000..9f7b0bb0c --- /dev/null +++ b/plugins/tiddlywiki/menubar/shortcutinfo-menubar-search.tid @@ -0,0 +1,4 @@ +tags: +title: $:/config/ShortcutInfo/menubar-search + +Select the menubar search field From fbf619b006d1c1ea342328ee269427784ebd7b71 Mon Sep 17 00:00:00 2001 From: Mohammad Rahmani <830394+kookma@users.noreply.github.com> Date: Thu, 12 Sep 2024 12:39:11 +0330 Subject: [PATCH 51/82] Update ViewTemplateBodyFilters.multids For Readability (#8592) This Cascade from ``` [tag[$:/tags/wiki-test-spec]type[text/vnd.tiddlywiki-multiple]then[$:/core/ui/TestCaseTemplate]] [tag[$:/tags/wiki-test-spec-failing]type[text/vnd.tiddlywiki-multiple]then[$:/core/ui/TestCaseTemplate]] ``` Simplified. I also suggest using the same convention for all cascades --- core/wiki/config/ViewTemplateBodyFilters.multids | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/wiki/config/ViewTemplateBodyFilters.multids b/core/wiki/config/ViewTemplateBodyFilters.multids index 42a7ad823..a91c039de 100644 --- a/core/wiki/config/ViewTemplateBodyFilters.multids +++ b/core/wiki/config/ViewTemplateBodyFilters.multids @@ -1,7 +1,7 @@ title: $:/config/ViewTemplateBodyFilters/ tags: $:/tags/ViewTemplateBodyFilter -testcase: [tag[$:/tags/wiki-test-spec]type[text/vnd.tiddlywiki-multiple]then[$:/core/ui/TestCaseTemplate]] [tag[$:/tags/wiki-test-spec-failing]type[text/vnd.tiddlywiki-multiple]then[$:/core/ui/TestCaseTemplate]] +testcase: [tag[$:/tags/wiki-test-spec]type[text/vnd.tiddlywiki-multiple]] [tag[$:/tags/wiki-test-spec-failing]type[text/vnd.tiddlywiki-multiple]] :then[[$:/core/ui/TestCaseTemplate]] stylesheet: [tag[$:/tags/Stylesheet]then[$:/core/ui/ViewTemplate/body/rendered-plain-text]] core-ui-tags: [tag[$:/tags/PageTemplate]] [tag[$:/tags/EditTemplate]] [tag[$:/tags/ViewTemplate]] [tag[$:/tags/KeyboardShortcut]] [tag[$:/tags/ImportPreview]] [tag[$:/tags/EditPreview]][tag[$:/tags/EditorToolbar]] [tag[$:/tags/Actions]] :then[[$:/core/ui/ViewTemplate/body/code]] system: [prefix[$:/boot/]] [prefix[$:/core/macros]] [prefix[$:/core/save/]] [prefix[$:/core/templates/]] [prefix[$:/config/]] [prefix[$:/info/]] [prefix[$:/language/]] [prefix[$:/languages/]] [prefix[$:/snippets/]] [prefix[$:/info/]] [prefix[$:/state/]] [prefix[$:/status/]] [prefix[$:/temp/]] :and[!is[image]] :then[[$:/core/ui/ViewTemplate/body/code]] From 18e1ee44d8a0f5e449dfe4b5b6569801fd341a29 Mon Sep 17 00:00:00 2001 From: Leilei332 <LeiYiXia29@outlook.com> Date: Fri, 13 Sep 2024 02:31:13 +0800 Subject: [PATCH 52/82] Move contents of config tab to readme tab in markdown plugin (#8595) --- plugins/tiddlywiki/markdown/config.tid | 70 ------------------------ plugins/tiddlywiki/markdown/plugin.info | 2 +- plugins/tiddlywiki/markdown/readme.tid | 69 +++++++++++++++++++++++ plugins/tiddlywiki/markdown/settings.tid | 2 +- 4 files changed, 71 insertions(+), 72 deletions(-) delete mode 100755 plugins/tiddlywiki/markdown/config.tid diff --git a/plugins/tiddlywiki/markdown/config.tid b/plugins/tiddlywiki/markdown/config.tid deleted file mode 100755 index 1438d3fa6..000000000 --- a/plugins/tiddlywiki/markdown/config.tid +++ /dev/null @@ -1,70 +0,0 @@ -title: $:/plugins/tiddlywiki/markdown/config - -! Plugin Configuration - -<h2 style="margin-top:1.5em">~WikiText Pragma</h2> - -The value of [[renderWikiTextPragma|$:/config/markdown/renderWikiTextPragma]] has been carefully tuned to properly integrate markdown with ~TiddlyWiki. Changing this setting may produce unexpected results, but the inclusion of the following parser rules should be fine: - -; image -: embed images using ~TiddlyWiki's image syntax: - -<p style="margin-left:1em"> - -``` -[img[An explanatory tooltip|TiddlerTitle]] - -[img width=23 class="tc-image" [https://tiddlywiki.com/fractalveg.jpg]] -``` -</p> - -; prettylink -: create links the ~TiddlyWiki way: - -<p style="margin-left:1em"> - -``` -[[TiddlerTitle]] - -[[Displayed Link Title|Tiddler Title]] - -[[TW5|https://tiddlywiki.com/]] -``` -</p> - -; prettyextlink -: create external links using the following syntax: - -<p style="margin-left:1em"> - -``` -[ext[Open file|index.html]] - -[ext[Open file|../README.md]] -``` -</p> - -; wikilink -: auto-link ~CamelCase titles - -; syslink -: auto-link system tiddlers - -<h2 style="margin-top:1.5em">Typographical Replacements</h2> - -When [[typographer|$:/config/markdown/typographer]] is enabled, markdown-it will provide these typographical replacements: - -``` -(c) (C) → © -(tm) (TM) → ™ -(r) (R) → ® -+- → ± -... → … -?.... → ?.. -!.... → !.. -????? → ??? -!!!!! → !!! -,, → , --- → – ---- → — -``` \ No newline at end of file diff --git a/plugins/tiddlywiki/markdown/plugin.info b/plugins/tiddlywiki/markdown/plugin.info index 1288ad068..37211a69e 100755 --- a/plugins/tiddlywiki/markdown/plugin.info +++ b/plugins/tiddlywiki/markdown/plugin.info @@ -2,6 +2,6 @@ "title": "$:/plugins/tiddlywiki/markdown", "name": "Markdown", "description": "Markdown parser based on markdown-it", - "list": "readme config settings syntax license", + "list": "readme settings syntax license", "stability": "STABILITY_2_STABLE" } diff --git a/plugins/tiddlywiki/markdown/readme.tid b/plugins/tiddlywiki/markdown/readme.tid index 1859fd36e..f924ddec8 100755 --- a/plugins/tiddlywiki/markdown/readme.tid +++ b/plugins/tiddlywiki/markdown/readme.tid @@ -29,4 +29,73 @@ var md = $tw.Wiki.parsers["text/markdown"].prototype.md; md.use(plugin1) .use(plugin2, opts, ...); +``` + +! Plugin Configuration + +<h2 style="margin-top:1.5em">~WikiText Pragma</h2> + +The value of [[renderWikiTextPragma|$:/config/markdown/renderWikiTextPragma]] has been carefully tuned to properly integrate markdown with ~TiddlyWiki. Changing this setting may produce unexpected results, but the inclusion of the following parser rules should be fine: + +; image +: embed images using ~TiddlyWiki's image syntax: + +<p style="margin-left:1em"> + +``` +[img[An explanatory tooltip|TiddlerTitle]] + +[img width=23 class="tc-image" [https://tiddlywiki.com/fractalveg.jpg]] +``` +</p> + +; prettylink +: create links the ~TiddlyWiki way: + +<p style="margin-left:1em"> + +``` +[[TiddlerTitle]] + +[[Displayed Link Title|Tiddler Title]] + +[[TW5|https://tiddlywiki.com/]] +``` +</p> + +; prettyextlink +: create external links using the following syntax: + +<p style="margin-left:1em"> + +``` +[ext[Open file|index.html]] + +[ext[Open file|../README.md]] +``` +</p> + +; wikilink +: auto-link ~CamelCase titles + +; syslink +: auto-link system tiddlers + +<h2 style="margin-top:1.5em">Typographical Replacements</h2> + +When [[typographer|$:/config/markdown/typographer]] is enabled, markdown-it will provide these typographical replacements: + +``` +(c) (C) → © +(tm) (TM) → ™ +(r) (R) → ® ++- → ± +... → … +?.... → ?.. +!.... → !.. +????? → ??? +!!!!! → !!! +,, → , +-- → – +--- → — ``` \ No newline at end of file diff --git a/plugins/tiddlywiki/markdown/settings.tid b/plugins/tiddlywiki/markdown/settings.tid index 54207fa10..85f419466 100644 --- a/plugins/tiddlywiki/markdown/settings.tid +++ b/plugins/tiddlywiki/markdown/settings.tid @@ -2,7 +2,7 @@ title: $:/plugins/tiddlywiki/markdown/settings tags: $:/tags/ControlPanel/SettingsTab caption: Markdown -These settings let you customise the behaviour of Markdown. See [[plugin|$:/plugins/tiddlywiki/markdown]] readme and config tab for more information. +These settings let you customise the behaviour of Markdown. See [[plugin|$:/plugins/tiddlywiki/markdown]] readme tab for more information. ''IMPORTANT:'' You must reload your wiki for changes to take effect. From c7ca8359ab4c90653168b30cf6dd5303436bcfda Mon Sep 17 00:00:00 2001 From: Leilei332 <LeiYiXia29@outlook.com> Date: Fri, 13 Sep 2024 02:33:57 +0800 Subject: [PATCH 53/82] Add drag and drop handling for export macro & rewrite using v5.3.2 syntax (#8594) --- core/wiki/macros/export.tid | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/core/wiki/macros/export.tid b/core/wiki/macros/export.tid index 42d42a48a..5233da385 100644 --- a/core/wiki/macros/export.tid +++ b/core/wiki/macros/export.tid @@ -1,14 +1,14 @@ title: $:/core/macros/export -tags: $:/tags/Macro +tags: $:/tags/Macro $:/tags/Global -\define exportButtonFilename(baseFilename) -$baseFilename$$(extension)$ +\function exportButtonFilename(baseFilename) +[<baseFilename>] [<extension>] +[join[]] \end -\define exportButton(exportFilter:"[!is[system]sort[title]]",lingoBase,baseFilename:"tiddlers") +\procedure exportButton(exportFilter:"[!is[system]sort[title]]",lingoBase,baseFilename:"tiddlers") \whitespace trim -<$vars hint={{{ [<__lingoBase__>addsuffix[Hint]get[text]] }}} - caption={{{ [<__lingoBase__>addsuffix[Caption]get[text]] }}} +<$let hint={{{ [<lingoBase>addsuffix[Hint]get[text]] }}} + caption={{{ [<lingoBase>addsuffix[Caption]get[text]] }}} > <span class="tc-popup-keep"> <$button popup=<<qualify "$:/state/popup/export">> @@ -16,19 +16,20 @@ $baseFilename$$(extension)$ aria-label=<<caption>> class=<<tv-config-toolbar-class>> selectedClass="tc-selected" + dragFilter=<<exportFilter>> > - <$list filter="[<tv-config-toolbar-icons>match[yes]]"> + <%if [<tv-config-toolbar-icons>match[yes]] %> {{$:/core/images/export-button}} - </$list> - <$list filter="[<tv-config-toolbar-text>match[yes]]"> + <%endif%> + <%if [<tv-config-toolbar-text>match[yes]] %> <span class="tc-btn-text"><$text text=<<caption>>/></span> - </$list> + <%endif%> </$button> </span> -</$vars> +</$let> <$reveal state=<<qualify "$:/state/popup/export">> type="popup" position="below" animate="yes"> <div class="tc-drop-down"> - <$set name="count" value={{{ [subfilter<__exportFilter__>count[]] }}}> + <$set name="count" value={{{ [subfilter<exportFilter>count[]] }}}> <$list filter="[all[shadows+tiddlers]tag[$:/tags/Exporter]]"> <$list filter="[<currentTiddler>has[condition]subfilter{!!condition}limit[1]] ~[<currentTiddler>!has[condition]then[true]]" variable="ignore" @@ -36,8 +37,8 @@ $baseFilename$$(extension)$ <$button class="tc-btn-invisible"> <$action-sendmessage $message="tm-download-file" $param=<<currentTiddler>> - exportFilter=<<__exportFilter__>> - filename={{{ [<__baseFilename__>addsuffix{!!extension}] }}} + exportFilter=<<exportFilter>> + filename={{{ [<baseFilename>addsuffix{!!extension}] }}} /> <$action-deletetiddler $tiddler=<<qualify "$:/state/popup/export">>/> <$transclude field="description"/> From a687bfe928903cf26e9df47ea04eb18188e62dc7 Mon Sep 17 00:00:00 2001 From: Leilei332 <LeiYiXia29@outlook.com> Date: Fri, 13 Sep 2024 22:19:09 +0800 Subject: [PATCH 54/82] [DOCS] Deprecate D3 and Mobile Drag and Drop plugin (#8597) * Deprecate D3 and Mobile Drag and Drop plugin Deprecate D3 and Mobile Drag and Drop plugin that is marked deprecated since 5.3.4 * Use superscript --- editions/tw5.com/tiddlers/plugins/D3 Plugin.tid | 8 ++++---- .../tiddlers/plugins/Mobile Drag And Drop Shim Plugin.tid | 7 ++++--- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/editions/tw5.com/tiddlers/plugins/D3 Plugin.tid b/editions/tw5.com/tiddlers/plugins/D3 Plugin.tid index 67941a9a2..7a8dc3a81 100644 --- a/editions/tw5.com/tiddlers/plugins/D3 Plugin.tid +++ b/editions/tw5.com/tiddlers/plugins/D3 Plugin.tid @@ -1,11 +1,11 @@ created: 20160107223425581 -list: -modified: 20170228102531138 -tags: OfficialPlugins [[Plugin Editions]] +caption: {{!!title}} - ^^deprecated^^ +modified: 20240913122437925 +tags: OfficialPlugins [[Plugin Editions]] $:/deprecated title: D3 Plugin type: text/vnd.tiddlywiki -The D3 plugin integrates the D3 visualisation library with TiddlyWiki. +<<.deprecated-since "5.3.4">> The D3 plugin integrates the D3 visualisation library with TiddlyWiki. See https://tiddlywiki.com/plugins/tiddlywiki/d3/ diff --git a/editions/tw5.com/tiddlers/plugins/Mobile Drag And Drop Shim Plugin.tid b/editions/tw5.com/tiddlers/plugins/Mobile Drag And Drop Shim Plugin.tid index 9ce97e21d..c7c4c2d77 100644 --- a/editions/tw5.com/tiddlers/plugins/Mobile Drag And Drop Shim Plugin.tid +++ b/editions/tw5.com/tiddlers/plugins/Mobile Drag And Drop Shim Plugin.tid @@ -1,7 +1,8 @@ created: 20170328173820802 -modified: 20170328174328792 -tags: OfficialPlugins +caption: {{!!title}} - ^^deprecated^^ +modified: 20240913122844238 +tags: OfficialPlugins $:/deprecated title: Mobile Drag And Drop Shim Plugin type: text/vnd.tiddlywiki -The Mobile Drag And Drop Shim Plugin provides a "shim" that enables HTML 5 compatible drag and drop operations on mobile browsers, including iOS and Android. The shim was created by Tim Ruffles and is published at https://github.com/timruffles/ios-html5-drag-drop-shim. \ No newline at end of file +<<.deprecated-since "5.3.4">> The Mobile Drag And Drop Shim Plugin provides a "shim" that enables HTML 5 compatible drag and drop operations on mobile browsers, including iOS and Android. The shim was created by Tim Ruffles and is published at https://github.com/timruffles/ios-html5-drag-drop-shim. From 33559075814a7eb4c7270de92f199693300a8c01 Mon Sep 17 00:00:00 2001 From: Leilei332 <LeiYiXia29@outlook.com> Date: Sun, 15 Sep 2024 17:48:08 +0800 Subject: [PATCH 55/82] Seperate clear cookie and disable actions in Browser Storage Plugin (#8602) Added two messages: * `tm-delete-browser-storage` for deleting the cookie saved by the Browser Storage plugin * `tm-disable-browser-storage` for disabling Browser Storage --- plugins/tiddlywiki/browser-storage/startup.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/plugins/tiddlywiki/browser-storage/startup.js b/plugins/tiddlywiki/browser-storage/startup.js index e06d7bf48..2d7287971 100644 --- a/plugins/tiddlywiki/browser-storage/startup.js +++ b/plugins/tiddlywiki/browser-storage/startup.js @@ -54,6 +54,13 @@ exports.startup = function() { $tw.wiki.addTiddler({title: ENABLED_TITLE, text: "no"}); $tw.browserStorage.clearLocalStorage(); }); + // Seperate clear cookie and disable action + $tw.rootWidget.addEventListener("tm-delete-browser-storage",function(event) { + $tw.browserStorage.clearLocalStorage(); + }); + $tw.rootWidget.addEventListener("tm-disable-browser-storage",function(event) { + $tw.wiki.addTiddler({title: ENABLED_TITLE, text: "no"}); + }); // Helpers for protecting storage from eviction var setPersistedState = function(state) { $tw.wiki.addTiddler({title: PERSISTED_STATE_TITLE, text: state}); From 6ae00e49732ded39c69c2b8b2291f1654afae0d4 Mon Sep 17 00:00:00 2001 From: Simon Huber <huber.simon@protonmail.com> Date: Sun, 15 Sep 2024 11:49:09 +0200 Subject: [PATCH 56/82] Improve View Widget Refreshing (#8135) * Update view.js * add viewhandler base class and view subclasses * simplify render methods of wikified views * use fakewidget's text for rendering * simplify wikified refresh methods * remove unneeded self=this * pass mode to makeTranscludeWidget * update view widget * update view widget --- core/modules/widgets/view.js | 434 +++++++++++++++++++++++++---------- 1 file changed, 314 insertions(+), 120 deletions(-) diff --git a/core/modules/widgets/view.js b/core/modules/widgets/view.js index 070836bff..ba0e8e989 100755 --- a/core/modules/widgets/view.js +++ b/core/modules/widgets/view.js @@ -18,6 +18,89 @@ var ViewWidget = function(parseTreeNode,options) { this.initialise(parseTreeNode,options); }; +var ViewHandler = function(widget) { + this.wiki = widget.wiki; + this.widget = widget; + this.document = widget.document; +}; + +/* +Base ViewHandler render method +*/ +ViewHandler.prototype.render = function(parent,nextSibling) { + this.text = this.getValue(); + this.createTextNode(parent,nextSibling); +}; + +/* +Base ViewHandler render method for wikified views +*/ +ViewHandler.prototype.renderWikified = function(parent,nextSibling) { + this.createFakeWidget(); + this.text = this.getValue(); + this.createWikifiedTextNode(parent,nextSibling); +}; + +/* +ViewHandler method to create a simple text node +*/ +ViewHandler.prototype.createTextNode = function(parent,nextSibling) { + if(this.text) { + var textNode = this.document.createTextNode(this.text); + parent.insertBefore(textNode,nextSibling); + this.widget.domNodes.push(textNode); + } else { + this.widget.makeChildWidgets(); + this.widget.renderChildren(parent,nextSibling); + } +}; + +/* +ViewHandler method to always create a text node, even if there's no text +*/ +ViewHandler.prototype.createWikifiedTextNode = function(parent,nextSibling) { + var textNode = this.document.createTextNode(this.text || ""); + parent.insertBefore(textNode,nextSibling); + this.widget.domNodes.push(textNode); +}; + +/* +ViewHandler method to create a fake widget used by wikified views +*/ +ViewHandler.prototype.createFakeWidget = function() { + this.fakeWidget = this.wiki.makeTranscludeWidget(this.widget.viewTitle,{ + document: $tw.fakeDocument, + field: this.widget.viewField, + index: this.widget.viewIndex, + parseAsInline: this.widget.viewMode !== "block", + mode: this.widget.viewMode === "block" ? "block" : "inline", + parentWidget: this.widget, + subTiddler: this.widget.viewSubTiddler + }); + this.fakeNode = $tw.fakeDocument.createElement("div"); + this.fakeWidget.makeChildWidgets(); + this.fakeWidget.render(this.fakeNode,null); +}; + +ViewHandler.prototype.refreshWikified = function(changedTiddlers) { + var refreshed = this.fakeWidget.refresh(changedTiddlers); + if(refreshed) { + var newText = this.getValue(); + if(newText !== this.text) { + this.widget.domNodes[0].textContent = newText; + this.text = newText; + } + } + return refreshed; +}; + +/* +Base ViewHandler refresh method +*/ +ViewHandler.prototype.refresh = function(changedTiddlers) { + return false; +}; + /* Inherit from the base widget class */ @@ -30,14 +113,8 @@ ViewWidget.prototype.render = function(parent,nextSibling) { this.parentDomNode = parent; this.computeAttributes(); this.execute(); - if(this.text) { - var textNode = this.document.createTextNode(this.text); - parent.insertBefore(textNode,nextSibling); - this.domNodes.push(textNode); - } else { - this.makeChildWidgets(); - this.renderChildren(parent,nextSibling); - } + this.view = this.getView(this.viewFormat); + this.view.render(parent,nextSibling); }; /* @@ -52,49 +129,238 @@ ViewWidget.prototype.execute = function() { this.viewFormat = this.getAttribute("format","text"); this.viewTemplate = this.getAttribute("template",""); this.viewMode = this.getAttribute("mode","block"); - switch(this.viewFormat) { - case "htmlwikified": - this.text = this.getValueAsHtmlWikified(this.viewMode); - break; - case "plainwikified": - this.text = this.getValueAsPlainWikified(this.viewMode); - break; - case "htmlencodedplainwikified": - this.text = this.getValueAsHtmlEncodedPlainWikified(this.viewMode); - break; - case "htmlencoded": - this.text = this.getValueAsHtmlEncoded(); - break; - case "htmltextencoded": - this.text = this.getValueAsHtmlTextEncoded(); - break; - case "urlencoded": - this.text = this.getValueAsUrlEncoded(); - break; - case "doubleurlencoded": - this.text = this.getValueAsDoubleUrlEncoded(); - break; - case "date": - this.text = this.getValueAsDate(this.viewTemplate); - break; - case "relativedate": - this.text = this.getValueAsRelativeDate(); - break; - case "stripcomments": - this.text = this.getValueAsStrippedComments(); - break; - case "jsencoded": - this.text = this.getValueAsJsEncoded(); - break; - default: // "text" - this.text = this.getValueAsText(); - break; - } }; /* -The various formatter functions are baked into this widget for the moment. Eventually they will be replaced by macro functions +Initialise the view subclasses */ +ViewWidget.prototype.getView = function(format) { + var View = this.initialiseView(); + View.prototype = Object.create(ViewHandler.prototype); + switch(format) { + case "htmlwikified": + View = this.initialiseHTMLWikifiedView(View); + break; + case "plainwikified": + View = this.initialisePlainWikifiedView(View); + break; + case "htmlencodedplainwikified": + View = this.initialiseHTMLEncodedPlainWikifiedView(View); + break; + case "htmlencoded": + View = this.initialiseHTMLEncodedView(View); + break; + case "htmltextencoded": + View = this.initialiseHTMLTextEncodedView(View); + break; + case "urlencoded": + View = this.initialiseURLEncodedView(View); + break; + case "doubleurlencoded": + View = this.initialiseDoubleURLEncodedView(View); + break; + case "date": + View = this.initialiseDateView(View); + break; + case "relativedate": + View = this.initialiseRelativeDateView(View); + break; + case "stripcomments": + View = this.initialiseStripCommentsView(View); + break; + case "jsencoded": + View = this.initialiseJSEncodedView(View); + break; + default: // "text" + View = this.initialiseTextView(View); + break; + }; + return new View(this); +}; + +/* +Return the function to intitialise the view subclass +*/ +ViewWidget.prototype.initialiseView = function() { + return function(widget) { + ViewHandler.call(this,widget); + }; +}; + +/* +Initialise HTML wikified view methods +*/ +ViewWidget.prototype.initialiseHTMLWikifiedView = function(View) { + + View.prototype.render = function(parent,nextSibling) { + this.renderWikified(parent,nextSibling); + }; + + View.prototype.getValue = function() { + return this.fakeNode.innerHTML; + }; + + View.prototype.refresh = function(changedTiddlers) { + return this.refreshWikified(changedTiddlers); + }; + return View; +}; + +/* +Initialise plain wikified view methods +*/ +ViewWidget.prototype.initialisePlainWikifiedView = function(View) { + + View.prototype.render = function(parent,nextSibling) { + this.renderWikified(parent,nextSibling); + }; + + View.prototype.getValue = function() { + return this.fakeNode.textContent; + }; + + View.prototype.refresh = function(changedTiddlers) { + return this.refreshWikified(changedTiddlers); + }; + return View; +}; + +/* +Initialise HTML encoded plain wikified methods +*/ +ViewWidget.prototype.initialiseHTMLEncodedPlainWikifiedView = function(View) { + + View.prototype.render = function(parent,nextSibling) { + this.renderWikified(parent,nextSibling); + }; + + View.prototype.getValue = function() { + return $tw.utils.htmlEncode(this.fakeNode.textContent); + }; + + View.prototype.refresh = function(changedTiddlers) { + return this.refreshWikified(changedTiddlers); + }; + return View; +}; + +/* +Initialise HTML encoded mehods +*/ +ViewWidget.prototype.initialiseHTMLEncodedView = function(View) { + var self = this; + View.prototype.getValue = function() { + return $tw.utils.htmlEncode(self.getValueAsText()); + }; + return View; +}; + +/* +Initialise HTML text encoded mehods +*/ +ViewWidget.prototype.initialiseHTMLTextEncodedView = function(View) { + var self = this; + View.prototype.getValue = function() { + return $tw.utils.htmlTextEncode(self.getValueAsText()); + }; + return View; +}; + +/* +Initialise URL encoded mehods +*/ +ViewWidget.prototype.initialiseURLEncodedView = function(View) { + var self = this; + View.prototype.getValue = function() { + return $tw.utils.encodeURIComponentExtended(self.getValueAsText()); + }; + return View; +}; + +/* +Initialise double URL encoded mehods +*/ +ViewWidget.prototype.initialiseDoubleURLEncodedView = function(View) { + var self = this; + View.prototype.getValue = function() { + return $tw.utils.encodeURIComponentExtended($tw.utils.encodeURIComponentExtended(self.getValueAsText())); + }; + return View; +}; + +/* +Initialise date mehods +*/ +ViewWidget.prototype.initialiseDateView = function(View) { + var self = this; + View.prototype.getValue = function(format) { + format = format || "YYYY MM DD 0hh:0mm"; + var value = $tw.utils.parseDate(self.getValue()); + if(value && $tw.utils.isDate(value) && value.toString() !== "Invalid Date") { + return $tw.utils.formatDateString(value,format); + } else { + return ""; + } + }; + return View; +}; + +/* +Initialise relative date mehods +*/ +ViewWidget.prototype.initialiseRelativeDateView = function(View) { + var self = this; + View.prototype.getValue = function(format) { + var value = $tw.utils.parseDate(self.getValue()); + if(value && $tw.utils.isDate(value) && value.toString() !== "Invalid Date") { + return $tw.utils.getRelativeDate((new Date()) - (new Date(value))).description; + } else { + return ""; + } + }; + return View; +}; + +/* +Initialise stripcomments mehods +*/ +ViewWidget.prototype.initialiseStripCommentsView = function(View) { + var self = this; + View.prototype.getValue = function() { + var lines = self.getValueAsText().split("\n"), + out = []; + for(var line=0; line<lines.length; line++) { + var text = lines[line]; + if(!/^\s*\/\/#/.test(text)) { + out.push(text); + } + } + return out.join("\n"); + }; + return View; +}; + +/* +Initialise JS encoded mehods +*/ +ViewWidget.prototype.initialiseJSEncodedView = function(View) { + var self = this; + View.prototype.getValue = function() { + return $tw.utils.stringify(self.getValueAsText()); + }; + return View; +}; + +/* +Initialise text mehods +*/ +ViewWidget.prototype.initialiseTextView = function(View) { + var self = this; + View.prototype.getValue = function() { + return self.getValueAsText(); + }; + return View; +}; /* Retrieve the value of the widget. Options are: @@ -138,78 +404,6 @@ ViewWidget.prototype.getValueAsText = function() { return this.getValue({asString: true}); }; -ViewWidget.prototype.getValueAsHtmlWikified = function(mode) { - return this.wiki.renderText("text/html","text/vnd.tiddlywiki",this.getValueAsText(),{ - parseAsInline: mode !== "block", - parentWidget: this - }); -}; - -ViewWidget.prototype.getValueAsPlainWikified = function(mode) { - return this.wiki.renderText("text/plain","text/vnd.tiddlywiki",this.getValueAsText(),{ - parseAsInline: mode !== "block", - parentWidget: this - }); -}; - -ViewWidget.prototype.getValueAsHtmlEncodedPlainWikified = function(mode) { - return $tw.utils.htmlEncode(this.wiki.renderText("text/plain","text/vnd.tiddlywiki",this.getValueAsText(),{ - parseAsInline: mode !== "block", - parentWidget: this - })); -}; - -ViewWidget.prototype.getValueAsHtmlEncoded = function() { - return $tw.utils.htmlEncode(this.getValueAsText()); -}; - -ViewWidget.prototype.getValueAsHtmlTextEncoded = function() { - return $tw.utils.htmlTextEncode(this.getValueAsText()); -}; - -ViewWidget.prototype.getValueAsUrlEncoded = function() { - return $tw.utils.encodeURIComponentExtended(this.getValueAsText()); -}; - -ViewWidget.prototype.getValueAsDoubleUrlEncoded = function() { - return $tw.utils.encodeURIComponentExtended($tw.utils.encodeURIComponentExtended(this.getValueAsText())); -}; - -ViewWidget.prototype.getValueAsDate = function(format) { - format = format || "YYYY MM DD 0hh:0mm"; - var value = $tw.utils.parseDate(this.getValue()); - if(value && $tw.utils.isDate(value) && value.toString() !== "Invalid Date") { - return $tw.utils.formatDateString(value,format); - } else { - return ""; - } -}; - -ViewWidget.prototype.getValueAsRelativeDate = function(format) { - var value = $tw.utils.parseDate(this.getValue()); - if(value && $tw.utils.isDate(value) && value.toString() !== "Invalid Date") { - return $tw.utils.getRelativeDate((new Date()) - (new Date(value))).description; - } else { - return ""; - } -}; - -ViewWidget.prototype.getValueAsStrippedComments = function() { - var lines = this.getValueAsText().split("\n"), - out = []; - for(var line=0; line<lines.length; line++) { - var text = lines[line]; - if(!/^\s*\/\/#/.test(text)) { - out.push(text); - } - } - return out.join("\n"); -}; - -ViewWidget.prototype.getValueAsJsEncoded = function() { - return $tw.utils.stringify(this.getValueAsText()); -}; - /* Selectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering */ @@ -219,7 +413,7 @@ ViewWidget.prototype.refresh = function(changedTiddlers) { this.refreshSelf(); return true; } else { - return false; + return this.view.refresh(changedTiddlers); } }; From e93515f32a7f96bf4b06990a90cec876308e8ac4 Mon Sep 17 00:00:00 2001 From: Leilei332 <LeiYiXia29@outlook.com> Date: Sun, 15 Sep 2024 17:49:33 +0800 Subject: [PATCH 57/82] Fix style of codemirror settings page (#8600) A small fix to make its style the same as the TiddlyWiki settings page. --- plugins/tiddlywiki/codemirror/ui/controlpanel/codemirror.tid | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/tiddlywiki/codemirror/ui/controlpanel/codemirror.tid b/plugins/tiddlywiki/codemirror/ui/controlpanel/codemirror.tid index f0e16ddee..29cf88f4c 100644 --- a/plugins/tiddlywiki/codemirror/ui/controlpanel/codemirror.tid +++ b/plugins/tiddlywiki/codemirror/ui/controlpanel/codemirror.tid @@ -13,9 +13,9 @@ list-after: $:/core/ui/ControlPanel/Settings/TiddlyWiki <$list filter="[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Settings/CodeMirror]]"> -<div style="border-top:1px solid #eee;"> +<div class="tc-control-panel-setting" data-setting-title=<<currentTiddler>> > -!! <$link><$transclude field="caption"/></$link> +!!.tc-control-panel-accent <$link><$transclude field="caption"/></$link> <$transclude/> From a510e4ad68994ab16b6e672a89fd20203f77e74d Mon Sep 17 00:00:00 2001 From: Leilei332 <LeiYiXia29@outlook.com> Date: Mon, 16 Sep 2024 17:38:27 +0800 Subject: [PATCH 58/82] Use colour-picker macro in Tag Manager (#8606) --- core/ui/TagManager.tid | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/core/ui/TagManager.tid b/core/ui/TagManager.tid index e2d6d2fa8..c14a3f560 100644 --- a/core/ui/TagManager.tid +++ b/core/ui/TagManager.tid @@ -46,6 +46,21 @@ color: #bbb </$reveal> \end +\procedure color-picker-actions() +\whitespace trim +<$action-setfield $tiddler=<<currentTiddler>> color=<<colour-picker-value>>/> +\end + +\procedure color-picker-button() +\whitespace trim +<div class="tc-drop-down-wrapper"> +<$button class="tc-btn-invisible" popup={{{ [[$:/state/tag-manager/color/]addsuffix<currentTiddler>] }}}>{{$:/core/images/palette}}</$button> +<$reveal type="popup" tag="div" class="tc-drop-down" state={{{ [[$:/state/tag-manager/color/]addsuffix<currentTiddler>] }}}> +<$transclude $variable="colour-picker" actions=<<color-picker-actions>>/> +</$reveal> +</div> +\end + \whitespace trim <table class="tc-tag-manager-table"> <tbody> @@ -58,7 +73,7 @@ color: #bbb </tr> <$list filter="[tags[]!is[system]sort[title]]"> <tr> - <td><$edit-text field="color" tag="input" type="color"/></td> + <td><$transclude $variable="color-picker-button"/></td> <td>{{||$:/core/ui/TagTemplate}}</td> <td><$count filter="[all[current]tagging[]]"/></td> <td> From 0f4d6e4e471d71b26bc993511311401890a77cb9 Mon Sep 17 00:00:00 2001 From: Leilei332 <LeiYiXia29@outlook.com> Date: Mon, 16 Sep 2024 17:38:55 +0800 Subject: [PATCH 59/82] Fix extra p tag in colour-picker (#8605) --- core/wiki/macros/colour-picker.tid | 2 -- 1 file changed, 2 deletions(-) diff --git a/core/wiki/macros/colour-picker.tid b/core/wiki/macros/colour-picker.tid index 1ff1e7b90..7a607a551 100644 --- a/core/wiki/macros/colour-picker.tid +++ b/core/wiki/macros/colour-picker.tid @@ -10,9 +10,7 @@ tags: $:/tags/Macro \define colour-picker-inner(actions) <$button tag="a" tooltip="""$(colour-picker-value)$"""> - $(colour-picker-update-recent)$ - <$transclude $variable="__actions__"/> <span style="display:inline-block; background-color: $(colour-picker-value)$; width: 100%; height: 100%; border-radius: 50%;"/> From 19990802fa75345bb16a118d46ef6f65c80e21d7 Mon Sep 17 00:00:00 2001 From: Leilei332 <LeiYiXia29@outlook.com> Date: Mon, 16 Sep 2024 17:39:50 +0800 Subject: [PATCH 60/82] Fix missing tiddler with code body isn't displayed properly. (#8604) --- core/ui/ViewTemplate/body/code.tid | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/ui/ViewTemplate/body/code.tid b/core/ui/ViewTemplate/body/code.tid index 9d2250395..ac678dd53 100644 --- a/core/ui/ViewTemplate/body/code.tid +++ b/core/ui/ViewTemplate/body/code.tid @@ -1,4 +1,8 @@ title: $:/core/ui/ViewTemplate/body/code +<%if [<currentTiddler>is[missing]] %> +<$transclude tiddler="$:/language/MissingTiddler/Hint"/> +<%else%> <$transclude $variable="copy-to-clipboard-above-right" src={{{ [<currentTiddler>get[text]] }}} /> <$codeblock code={{{ [<currentTiddler>get[text]] }}} language={{{ [<currentTiddler>get[type]else[text/vnd.tiddlywiki]] }}}/> +<%endif%> \ No newline at end of file From 6dbdbfbe8224985a53aaf93b2308f5bfd2a52143 Mon Sep 17 00:00:00 2001 From: Leilei332 <LeiYiXia29@outlook.com> Date: Mon, 16 Sep 2024 20:24:58 +0800 Subject: [PATCH 61/82] Fix overflow in table and table-of-contents (#8608) Another approach fix overflow. --- themes/tiddlywiki/vanilla/base.tid | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/themes/tiddlywiki/vanilla/base.tid b/themes/tiddlywiki/vanilla/base.tid index 65c1a5fe3..4a4867c0b 100644 --- a/themes/tiddlywiki/vanilla/base.tid +++ b/themes/tiddlywiki/vanilla/base.tid @@ -2779,6 +2779,20 @@ a.tc-tiddlylink.tc-plugin-info:hover > .tc-plugin-info-chunk .tc-plugin-info-sta display: table; } +/* Fix overflow in table and toc */ +.tc-tiddler-body .tc-tabbed-table-of-contents { + overflow-x: auto; +} + +.tc-tiddler-body > table { + display: block; + overflow: auto; +} +.tc-tiddler-body > table tbody { + display: table; + width: 100%; +} + /* ** Chooser */ From 0222d4df7c633088e92709fcb592b17725e8758c Mon Sep 17 00:00:00 2001 From: Maurycy Zarzycki <maurycy@evidentlycube.com> Date: Tue, 17 Sep 2024 08:48:32 +0200 Subject: [PATCH 62/82] Add translation changes to Polish from commits: (#8612) * ece8b0ee01f04f9a88066d48500f41bc3765dfff * 5aa3646df5349acc097a2198e47177fc15daa02e * c8cbf6853ecb9e634a65ee3120d4cf41415dd4b2 * 18152aa7c8a4961da0b0fe31565693c515517880 * d2302df197cc2ade1684055cd26c708c1cda496a * 8735d1ac93054c54459832fcc8252ac4d6fa03d2 * 82bf4480de5784eaf4dd07249013ba9e435063c1 * 3af2a0ae6f95cbe76381ab1125f4a29632cf4178 * 57d3e8e765cda7dadce9f021a5caab2dcfb9b4a8 * 5c43512a56b9e08e680ad555439d8932ea2b9164 * 98cd4a09b4edd5e73107573e6cf075a4bb7a1cba * 98d411c08a3511cbed4b0c70422dd2b8bb5d546a --- core/language/en-GB/Misc.multids | 2 +- languages/pl-PL/Buttons.multids | 4 ++++ languages/pl-PL/ControlPanel.multids | 16 ++++++++++++++++ languages/pl-PL/Docs/PaletteColours.multids | 7 +++++++ languages/pl-PL/EditTemplate.multids | 1 + languages/pl-PL/Fields.multids | 1 + languages/pl-PL/Misc.multids | 2 ++ languages/pl-PL/Search.multids | 2 ++ languages/pl-PL/Snippets/FunctionDefinition.tid | 7 +++++++ languages/pl-PL/Snippets/ProcedureDefinition.tid | 7 +++++++ .../pl-PL/Types/text_vnd.tiddlywiki_multiple.tid | 6 ++++++ 11 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 languages/pl-PL/Snippets/FunctionDefinition.tid create mode 100644 languages/pl-PL/Snippets/ProcedureDefinition.tid create mode 100644 languages/pl-PL/Types/text_vnd.tiddlywiki_multiple.tid diff --git a/core/language/en-GB/Misc.multids b/core/language/en-GB/Misc.multids index d8c091375..2a771e090 100644 --- a/core/language/en-GB/Misc.multids +++ b/core/language/en-GB/Misc.multids @@ -42,7 +42,7 @@ Error/RetrievingSkinny: Error retrieving skinny tiddler list Error/SavingToTWEdit: Error saving to TWEdit Error/WhileSaving: Error while saving Error/XMLHttpRequest: XMLHttpRequest error code -Error/ZoominTextNode: Story View Error: It appears you tried to interact with a tiddler that displays in a custom container. This is most likely caused by using `$:/tags/StoryTiddlerTemplateFilter` with a template that contains text or whitespace at the start. Please use the pragma `\whitespace trim` and ensure the whole contents of the tiddler is wrapped in a single HTML element. The text that caused this issue: +Error/ZoominTextNode: Błąd Widoku: Wykryto błędną interakcję z tiddlerem, który wyświetlany jest w niestandardowym kontenerze. Jest to najprawdopodobniej spowodowane użyciem `$:/tags/StoryTiddlerTemplateFilter` z motywem, który ma tekst lub białe znaki na początku. Użyj pragmy `\whitespace trim` i upewnij się, że cała treść tiddlera opakowana jest w jeden element HTML. Tekst, który spowodał problem: InternalJavaScriptError/Title: Internal JavaScript Error InternalJavaScriptError/Hint: Well, this is embarrassing. It is recommended that you restart TiddlyWiki by refreshing your browser LayoutSwitcher/Description: Open the layout switcher diff --git a/languages/pl-PL/Buttons.multids b/languages/pl-PL/Buttons.multids index 911559337..07d44db5a 100644 --- a/languages/pl-PL/Buttons.multids +++ b/languages/pl-PL/Buttons.multids @@ -79,6 +79,7 @@ NewMarkdown/Caption: nowy Markdown tiddler NewMarkdown/Hint: Stwórz nowego tiddlera o typie Markdown NewTiddler/Caption: nowy tiddler NewTiddler/Hint: Stwórz nowego tiddlera +OpenControlPanel/Hint: Otwórz panel kontrolny OpenWindow/Caption: otwórz w nowym oknie OpenWindow/Hint: Otwórz tego tiddlera w nowym oknie Palette/Caption: paleta @@ -103,6 +104,8 @@ ShowSideBar/Caption: pokaż menu boczne ShowSideBar/Hint: Pokaż menu boczne TagManager/Caption: menedżer tagów TagManager/Hint: Otwórz menedżer tagów +TestCaseImport/Caption: importuj tiddlery +TestCaseImport/Hint: Importuj tiddlery Timestamp/Caption: aktualizacje czasu Timestamp/Hint: Wybierz czy zmiany mają aktualizować czas Timestamp/On/Caption: zmiany czasu są włączone @@ -129,6 +132,7 @@ Excise/Caption/Replace/Link: link Excise/Caption/Replace/Transclusion: transkluzja Excise/Caption/Tag: Otaguj nowego tiddlera nazwą tego Excise/Caption/TiddlerExists: Uwaga: tiddler już istnieje +Excise/DefaultTitle: Nowe Wycięcie Excise/Hint: Wytnij zaznaczony tekst i wstaw go do nowego tidlera Heading1/Caption: nagłówek 1 Heading1/Hint: Zmień zaznaczony tekst na nagłówek 1. stopnia diff --git a/languages/pl-PL/ControlPanel.multids b/languages/pl-PL/ControlPanel.multids index 2ee8983c2..220de0267 100644 --- a/languages/pl-PL/ControlPanel.multids +++ b/languages/pl-PL/ControlPanel.multids @@ -198,6 +198,12 @@ Settings/TitleLinks/Yes/Description: Wyświetlaj nazwy jako linki Settings/MissingLinks/Caption: Wiki Linki Settings/MissingLinks/Hint: Wybierz czy linkować do nieistniejących jeszcze tiddlerów Settings/MissingLinks/Description: Włacz linowanie do nieistniejących tiddlerów +SocialCard/Caption: Karta Mediów Społecznościowych +SocialCard/Domain/Prompt: Domena wyświetlana przy linku (np, ''tiddlywiki.com'') +SocialCard/Hint: Informacje wykorzysytwane przez media społecznościowe i komunikatury by wyświetlić kartę z podglądem link do tej TiddlyWiki przy wklejeniu linka +SocialCard/PreviewUrl/Prompt: Pełen adres do obrazka podglądku dla tej TiddlyWiki +SocialCard/PreviewUrl/Preview: Podgląd obrazka: +SocialCard/Url/Prompt: Pełen adres do tej TiddlyWiki StoryTiddler/Caption: Widok Tiddlera StoryTiddler/Hint: Ta kaskada określa szablon używany podczas wyświetlania tiddlera w Story River. StoryView/Caption: Widok Story River @@ -206,6 +212,12 @@ Stylesheets/Caption: Style: Stylesheets/Expand/Caption: Rozwiń Wszystko Stylesheets/Hint: To jest wyrenderowany CSS obecnych tiddlerów otagowanych jako <<tag "$:/tags/Stylesheet">> Stylesheets/Restore/Caption: Przywróć +TestCases/Caption: Przypadki Testowe +TestCases/Hint: Przypadki testowe służą do nauki oraz testowania systemu +TestCases/All/Caption: Wszystkie Przypadki Testowe +TestCases/All/Hint: Wszystkie Przypadki Testowe +TestCases/Failed/Caption: Nieudane Przypadki Testowe +TestCases/Failed/Hint: Tylko Nieudane Przypadki Testowe Theme/Caption: Motyw Theme/Prompt: Obecny motyw: TiddlerFields/Caption: Pola tiddlerów @@ -229,3 +241,7 @@ ViewTemplateBody/Caption: Treść Wyświetlanego Tiddlera ViewTemplateBody/Hint: Ta kaskada określa szablon wyświetlania treści tiddlera (czyli jego tekstu, w przeciwieństwie do kaskady 'Widok Tiddlera'). ViewTemplateTitle/Caption: Tytuł Wyświetlanego Tiddlera ViewTemplateTitle/Hint: Ta kaskada określa szablon wyświetlania tytułu tiddlera. +ViewTemplateSubtitle/Caption: Podtytuł Wyświetlanego Tiddlera +ViewTemplateSubtitle/Hint: Ta kaskada określa szablon wyświetlania podtytułu tiddlera. +ViewTemplateTags/Caption: Tagi Wyświetlanego Tiddlera +ViewTemplateTags/Hint: Ta kaskada określa szablon wyświetlania tagów tiddlera. \ No newline at end of file diff --git a/languages/pl-PL/Docs/PaletteColours.multids b/languages/pl-PL/Docs/PaletteColours.multids index 2fe037cfb..be660c954 100644 --- a/languages/pl-PL/Docs/PaletteColours.multids +++ b/languages/pl-PL/Docs/PaletteColours.multids @@ -65,6 +65,13 @@ sidebar-tab-foreground-selected: Tekst wybranej zakładki w menu bocznym sidebar-tab-foreground: Tekst zakładki w menu bocznym sidebar-tiddler-link-foreground-hover: Tekst po najechaniu linku do tiddlera w menu bocznym sidebar-tiddler-link-foreground: Tekst linka do tiddlera w menu bocznym +stability-stable: Odznaka dla stanu wtyczki "stabilna" (stable) +stability-experimental: Odznaka dla stanu wtyczki "eksperymentalna" (experimental) +stability-deprecated: Odznaka dla stanu wtyczki "wycofana" (deprecated) +stability-legacy: Odznaka dla stanu wtyczki "stara" (legacy) +testcase-accent-level-1: Akcent kolorystyczny niezagnieżdzonego przypadku testowego +testcase-accent-level-2: Akcent kolorystyczny pojedynczo zagnieżdzonego przypadku testowego +testcase-accent-level-3: Akcent kolorystyczny podwójnie zagnieżdzonego przypadku testowego site-title-foreground: Tekst nazwy strony static-alert-foreground: Tekst statycznego alertu tab-background-selected: Tło wybranej zakładki diff --git a/languages/pl-PL/EditTemplate.multids b/languages/pl-PL/EditTemplate.multids index ca3590d4d..6d581fd52 100644 --- a/languages/pl-PL/EditTemplate.multids +++ b/languages/pl-PL/EditTemplate.multids @@ -26,6 +26,7 @@ Tags/ClearInput/Caption: wyczyść Tags/ClearInput/Hint: Wyczyść tagi Tags/Dropdown/Caption: lista tagów Tags/Dropdown/Hint: Pokaż listę tagów +Tags/EmptyMessage: (brak wyników) Title/BadCharacterWarning: Uwaga: unikaj używania któregokolwiek z tych znaków w nazwach tiddlerów: <<bad-chars>> Title/Exists/Prompt: Docelowy tiddler już istnieje Title/Relink/Prompt: Zaktualizuj ''<$text text=<<fromTitle>>/>'' na ''<$text text=<<toTitle>>/>'' w //tagach// i //listach// pól innych tiddlerów diff --git a/languages/pl-PL/Fields.multids b/languages/pl-PL/Fields.multids index 6b1fe1c41..cab393782 100644 --- a/languages/pl-PL/Fields.multids +++ b/languages/pl-PL/Fields.multids @@ -29,6 +29,7 @@ name: Czytelna nazwa powiązana z tiddlerem wtyczki parent-plugin: Określa nadrzędną wtyczkę plugin-priority: Numeryczna wartość określająca tiddlera wtyczki plugin-type: Typ tiddlera wtyczki +stability: Stan rozwoju wtyczki: wycofany (deprecated), eksperymentalny (experimental), stabilny (stable), stary (legacy) revision: Numer rewizji tiddlera przechowywany na serwerze released: Data wydania TiddlyWiki source: URL źródłowy powiązany z tiddlerem diff --git a/languages/pl-PL/Misc.multids b/languages/pl-PL/Misc.multids index 211798bc8..9e26d5897 100644 --- a/languages/pl-PL/Misc.multids +++ b/languages/pl-PL/Misc.multids @@ -42,6 +42,7 @@ Error/RetrievingSkinny: Bład przy pobieraniu listy tiddlerów Error/SavingToTWEdit: Bład przy zapisywaniu do TWEdit Error/WhileSaving: Bład przy zapisywaniu Error/XMLHttpRequest: Kod błedu XMLHttpRequest +Error/ZoominTextNode: Story View Error: It appears you tried to interact with a tiddler that displays in a custom container. This is most likely caused by using `$:/tags/StoryTiddlerTemplateFilter` with a template that contains text or whitespace at the start. Please use the pragma `\whitespace trim` and ensure the whole contents of the tiddler is wrapped in a single HTML element. The text that caused this issue: InternalJavaScriptError/Title: Wewnętrzny bład JavaScript InternalJavaScriptError/Hint: Ups, to się nie powinno zdarzyć. Zalecamy ponowne uruchomienie TiddlyWiki poprzez odświeżenie strony w przeglądarce. LayoutSwitcher/Description: Otwórzy wybór motywu @@ -70,6 +71,7 @@ OfficialPluginLibrary: Oficjalna Biblioteka Wtyczek ~TiddlyWiki OfficialPluginLibrary/Hint: Oficjalna biblioteka wtyczek ~TiddlyWiki z tiddlywiki.com. Wtyczki, motywi i paczki językowe są utrzymywane przez główny zespół TiddlyWiki. PageTemplate/Description: domyślny motyw ~TiddlyWiki PageTemplate/Name: Domyślny szablon strony +PluginReloadWarning: Zapisz {{$:/core/ui/Buttons/save-wiki}} i odśwież {{$:/core/ui/Buttons/refresh}} ~TiddlyWiki by zastosować zmiany we wtyczkach używajacych ~JavaScriptu RecentChanges/DateFormat: 0DD-0MM-YYYY Shortcuts/Input/AdvancedSearch/Hint: Otwórzy panel zaawansowanego wyszukiwania z poziomu menu bocznego Shortcuts/Input/Accept/Hint: Zaakceptuj zaznaczenia diff --git a/languages/pl-PL/Search.multids b/languages/pl-PL/Search.multids index dd635338d..a9a77ac18 100644 --- a/languages/pl-PL/Search.multids +++ b/languages/pl-PL/Search.multids @@ -6,6 +6,8 @@ Filter/Hint: Szukaj przy pomocy [[wyrażenia filtrującego|https://tiddlywiki.co Filter/Matches: //<small>trafienia: <<resultCount>></small>// Matches: //<small>trafienia: <<resultCount>></small>// Matches/All: Wszystkie trafienia +Matches/NoMatch: //Brak trafień// +Matches/NoResult: //Brak wyników// Matches/Title: Trafienia w nazwach: Search: Szukaj Search/TooShort: Zbyt krótki tekst wyszukiwania diff --git a/languages/pl-PL/Snippets/FunctionDefinition.tid b/languages/pl-PL/Snippets/FunctionDefinition.tid new file mode 100644 index 000000000..5f6436f46 --- /dev/null +++ b/languages/pl-PL/Snippets/FunctionDefinition.tid @@ -0,0 +1,7 @@ +title: $:/language/Snippets/FunctionDefinition +tags: $:/tags/TextEditor/Snippet +caption: Definicja funkcji + +\function f.name(param1,param2:"default value") [<param1>!is[blank]else<param2>] + +<<f.name>> \ No newline at end of file diff --git a/languages/pl-PL/Snippets/ProcedureDefinition.tid b/languages/pl-PL/Snippets/ProcedureDefinition.tid new file mode 100644 index 000000000..a74204f58 --- /dev/null +++ b/languages/pl-PL/Snippets/ProcedureDefinition.tid @@ -0,0 +1,7 @@ +title: $:/language/Snippets/ProcedureDefinition +tags: $:/tags/TextEditor/Snippet +caption: Definicja procedury + +\procedure procName(param1:"default value",param2) +Wstaw tekstu tutaj. +\end \ No newline at end of file diff --git a/languages/pl-PL/Types/text_vnd.tiddlywiki_multiple.tid b/languages/pl-PL/Types/text_vnd.tiddlywiki_multiple.tid new file mode 100644 index 000000000..678b748ea --- /dev/null +++ b/languages/pl-PL/Types/text_vnd.tiddlywiki_multiple.tid @@ -0,0 +1,6 @@ + +title: $:/language/Docs/Types/text/vnd.tiddlywiki-multiple +description: Zbiorczy tiddler +name: text/vnd.tiddlywiki-multiple +group: Developer +group-sort: 2 \ No newline at end of file From 8d80ff297c75232b1a75ae15d9a869d36d5f7f33 Mon Sep 17 00:00:00 2001 From: Leilei332 <LeiYiXia29@outlook.com> Date: Tue, 17 Sep 2024 14:51:13 +0800 Subject: [PATCH 63/82] Fix colour-picker dropdown auto close when selecting or typing a color (#8610) --- core/ui/TagManager.tid | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/ui/TagManager.tid b/core/ui/TagManager.tid index c14a3f560..e554d66cc 100644 --- a/core/ui/TagManager.tid +++ b/core/ui/TagManager.tid @@ -55,7 +55,7 @@ color: #bbb \whitespace trim <div class="tc-drop-down-wrapper"> <$button class="tc-btn-invisible" popup={{{ [[$:/state/tag-manager/color/]addsuffix<currentTiddler>] }}}>{{$:/core/images/palette}}</$button> -<$reveal type="popup" tag="div" class="tc-drop-down" state={{{ [[$:/state/tag-manager/color/]addsuffix<currentTiddler>] }}}> +<$reveal type="popup" tag="div" class="tc-drop-down tc-popup-keep" state={{{ [[$:/state/tag-manager/color/]addsuffix<currentTiddler>] }}}> <$transclude $variable="colour-picker" actions=<<color-picker-actions>>/> </$reveal> </div> From 73225d09d7568b450652ad9b73f702d9d0eed783 Mon Sep 17 00:00:00 2001 From: Leilei332 <LeiYiXia29@outlook.com> Date: Tue, 17 Sep 2024 14:52:46 +0800 Subject: [PATCH 64/82] Fix shadow tiddler with code body displayed as missing (#8609) Fix problem introduced in #8604 --- core/ui/ViewTemplate/body/code.tid | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/ui/ViewTemplate/body/code.tid b/core/ui/ViewTemplate/body/code.tid index ac678dd53..380df84b7 100644 --- a/core/ui/ViewTemplate/body/code.tid +++ b/core/ui/ViewTemplate/body/code.tid @@ -1,6 +1,6 @@ title: $:/core/ui/ViewTemplate/body/code -<%if [<currentTiddler>is[missing]] %> +<%if [<currentTiddler>is[missing]] :and[!is[shadow]] %> <$transclude tiddler="$:/language/MissingTiddler/Hint"/> <%else%> <$transclude $variable="copy-to-clipboard-above-right" src={{{ [<currentTiddler>get[text]] }}} /> From c38641157088fdd76b357edf0a71fe250eed2937 Mon Sep 17 00:00:00 2001 From: Leilei332 <LeiYiXia29@outlook.com> Date: Tue, 17 Sep 2024 20:16:18 +0800 Subject: [PATCH 65/82] Make stability badge text translatable (#8614) --- core/language/en-GB/ControlPanel.multids | 4 ++++ core/ui/Components/plugin-info.tid | 8 ++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/core/language/en-GB/ControlPanel.multids b/core/language/en-GB/ControlPanel.multids index a1b164c5c..7adf4aa04 100644 --- a/core/language/en-GB/ControlPanel.multids +++ b/core/language/en-GB/ControlPanel.multids @@ -96,6 +96,10 @@ Plugins/PluginWillRequireReload: (requires reload) Plugins/Plugins/Caption: Plugins Plugins/Plugins/Hint: Plugins Plugins/Reinstall/Caption: reinstall +Plugins/Stability/Deprecated: DEPRECATED +Plugins/Stability/Experimental: EXPERIMENTAL +Plugins/Stability/Legacy: LEGACY +Plugins/Stability/Stable: STABLE Plugins/Themes/Caption: Themes Plugins/Themes/Hint: Theme plugins Plugins/Update/Caption: update diff --git a/core/ui/Components/plugin-info.tid b/core/ui/Components/plugin-info.tid index d7f408bd9..50766e51d 100644 --- a/core/ui/Components/plugin-info.tid +++ b/core/ui/Components/plugin-info.tid @@ -47,13 +47,13 @@ $:/config/Plugins/Disabled/$(currentTiddler)$ <h2> <div> <%if [<currentTiddler>get[stability]match[STABILITY_0_DEPRECATED]] %> - <span class="tc-plugin-info-stability tc-plugin-info-stability-deprecated">DEPRECATED</span> + <span class="tc-plugin-info-stability tc-plugin-info-stability-deprecated"><<lingo "Stability/Deprecated">></span> <%elseif [<currentTiddler>get[stability]match[STABILITY_1_EXPERIMENTAL]] %> - <span class="tc-plugin-info-stability tc-plugin-info-stability-experimental">EXPERIMENTAL</span> + <span class="tc-plugin-info-stability tc-plugin-info-stability-experimental"><<lingo "Stability/Experimental">></span> <%elseif [<currentTiddler>get[stability]match[STABILITY_2_STABLE]] %> - <span class="tc-plugin-info-stability tc-plugin-info-stability-stable">STABLE</span> + <span class="tc-plugin-info-stability tc-plugin-info-stability-stable"><<lingo "Stability/Stable">></span> <%elseif [<currentTiddler>get[stability]match[STABILITY_3_LEGACY]] %> - <span class="tc-plugin-info-stability tc-plugin-info-stability-legacy">LEGACY</span> + <span class="tc-plugin-info-stability tc-plugin-info-stability-legacy"><<lingo "Stability/Legacy">></span> <%endif%> <em><$view field="version"/></em></div> </h2> From 38f7e792bcd455d2456069479d35a52f51b51bbb Mon Sep 17 00:00:00 2001 From: "j. redhead" <jeremyredhead@users.noreply.github.com> Date: Sat, 21 Sep 2024 04:56:37 -0500 Subject: [PATCH 66/82] Docs: fix typo in a wikilink (#8616) --- .../parser/Places where the parser ignores WikiText.tid | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/editions/tw5.com/tiddlers/wikitext/parser/Places where the parser ignores WikiText.tid b/editions/tw5.com/tiddlers/wikitext/parser/Places where the parser ignores WikiText.tid index d52193148..2a656311e 100644 --- a/editions/tw5.com/tiddlers/wikitext/parser/Places where the parser ignores WikiText.tid +++ b/editions/tw5.com/tiddlers/wikitext/parser/Places where the parser ignores WikiText.tid @@ -1,6 +1,6 @@ caption: ignore parser mode created: 20220111000929700 -modified: 20220122182842038 +modified: 20240921085112396 tags: [[WikiText Parser Modes]] title: Places where the parser ignores WikiText type: text/vnd.tiddlywiki @@ -10,5 +10,5 @@ Text enclosed by these constructs is skipped by the parser and WikiText punctuat |[[Code Blocks in WikiText]]|One of the main purposes of code blocks is to suppress wikitext expansion. Once the code block starts, the parser will ignore all WikiText punctuation until the code block ends.| |[[Images in WikiText]]|`[[img|literal image link text]]` - the text enclosed by square braces will be ignored. This means, for example, [[transclusions|Transclusion in WikiText]] and [[macro calls|Macro Calls]] cannot be used to dynamically construct the link text| |[[Linking in WikiText]]|`[[literal link target|literal link text]]` - the text enclosed by square braces will be ignored. This means, for example, [[transclusions|Transclusion in WikiText]] and [[macro calls|Macro Calls]] cannot be used to dynamically construct the link target or the link text| -|[[Macro Calls]]|`<<mymacro ''notbold'' "literal text" "<<macro_expansion_ignored>>" {{transclusion_ignored}}>>` - while processing the text enclosed by a macro call, the parser will follow special rules for detecting macro parameters. These rules do not include detection of WikiText. However, after the parameters are substituted into the macro definition, the result will be parsed using [[normal rules|Wiki Text Parser Modes]]. This will likely result in the detection of any WikiText.| +|[[Macro Calls]]|`<<mymacro ''notbold'' "literal text" "<<macro_expansion_ignored>>" {{transclusion_ignored}}>>` - while processing the text enclosed by a macro call, the parser will follow special rules for detecting macro parameters. These rules do not include detection of WikiText. However, after the parameters are substituted into the macro definition, the result will be parsed using the [[normal rules|WikiText Parser Modes]]. This will likely result in the detection of any WikiText.| From 6abfbc39874d1110c0920fcf08fc461c7ae21730 Mon Sep 17 00:00:00 2001 From: Jeremy Ruston <jeremy@jermolene.com> Date: Sat, 21 Sep 2024 13:31:07 +0100 Subject: [PATCH 67/82] Remove extraneous build of the dev edition --- bin/build-site.sh | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/bin/build-site.sh b/bin/build-site.sh index aece60267..43ba7b9d7 100755 --- a/bin/build-site.sh +++ b/bin/build-site.sh @@ -164,20 +164,6 @@ node $TW5_BUILD_TIDDLYWIKI \ --rendertiddler $:/core/save/all tour.html text/plain \ || exit 1 -# /dev/index.html Developer docs -# /dev/favicon.ico Favicon for dev site -# /dev/static.html Static rendering of default tiddlers -# /dev/alltiddlers.html Static rendering of all tiddlers -# /dev/static/* Static single tiddlers -# /dev/static/static.css Static stylesheet -node $TW5_BUILD_TIDDLYWIKI \ - ./editions/dev \ - --verbose \ - --load $TW5_BUILD_OUTPUT/build.tid \ - --output $TW5_BUILD_OUTPUT/dev \ - --build index favicon static \ - || exit 1 - # /share.html Custom edition for sharing via the URL node $TW5_BUILD_TIDDLYWIKI \ ./editions/share \ From ecbbbe39da0fb5175cedf1e1e5bbab4f047c89aa Mon Sep 17 00:00:00 2001 From: Jeremy Ruston <jeremy@jermolene.com> Date: Mon, 23 Sep 2024 12:06:47 +0100 Subject: [PATCH 68/82] 20 years of TiddlyWiki banner --- .../tiddlers/hellothere/HelloThumbnail.tid | 2 +- .../thumbnails/HelloThumbnail - Funding.tid | 1 - .../HelloThumbnail - Marketplace.tid | 1 - ...oThumbnail - Twenty Years of TiddlyWiki.tid | 9 +++++++++ .../images/Twenty Years of TiddlyWiki.png | Bin 0 -> 229204 bytes .../images/Twenty Years of TiddlyWiki.png.meta | 4 ++++ 6 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Twenty Years of TiddlyWiki.tid create mode 100644 editions/tw5.com/tiddlers/images/Twenty Years of TiddlyWiki.png create mode 100644 editions/tw5.com/tiddlers/images/Twenty Years of TiddlyWiki.png.meta diff --git a/editions/tw5.com/tiddlers/hellothere/HelloThumbnail.tid b/editions/tw5.com/tiddlers/hellothere/HelloThumbnail.tid index 033371172..07eaaa05f 100644 --- a/editions/tw5.com/tiddlers/hellothere/HelloThumbnail.tid +++ b/editions/tw5.com/tiddlers/hellothere/HelloThumbnail.tid @@ -1,5 +1,5 @@ created: 20150414070451144 -list: [[HelloThumbnail - Newsletter]] [[HelloThumbnail - Introduction Video]] [[HelloThumbnail - Grok TiddlyWiki]] [[HelloThumbnail - Latest Version]] [[HelloThumbnail - TiddlyWikiLinks]] [[HelloThumbnail - Developers]] [[HelloThumbnail - Funding]] [[HelloThumbnail - Marketplace]] [[HelloThumbnail - Intertwingled Innovations]] +list: [[HelloThumbnail - Twenty Years of TiddlyWiki]] [[HelloThumbnail - Newsletter]] [[HelloThumbnail - Introduction Video]] [[HelloThumbnail - Grok TiddlyWiki]] [[HelloThumbnail - Latest Version]] [[HelloThumbnail - TiddlyWikiLinks]] [[HelloThumbnail - Developers]] [[HelloThumbnail - Funding]] [[HelloThumbnail - Marketplace]] [[HelloThumbnail - Intertwingled Innovations]] modified: 20150414070948246 title: HelloThumbnail type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Funding.tid b/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Funding.tid index bc48ec0c0..1c9b2fffc 100644 --- a/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Funding.tid +++ b/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Funding.tid @@ -5,6 +5,5 @@ image: Funding.png link: Funding TiddlyWiki tags: HelloThumbnail title: HelloThumbnail - Funding -ribbon-text: NEW Find out how you can help support ~TiddlyWiki financially \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Marketplace.tid b/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Marketplace.tid index 39a72569c..6dfdcf66b 100644 --- a/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Marketplace.tid +++ b/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Marketplace.tid @@ -5,6 +5,5 @@ background-color: #EAE57D image: TiddlyWiki Marketplace Banner caption: ~TiddlyWiki Marketplace link: TiddlyWiki Marketplace -ribbon-text: NEW Explore commercial products and services for ~TiddlyWiki \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Twenty Years of TiddlyWiki.tid b/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Twenty Years of TiddlyWiki.tid new file mode 100644 index 000000000..237cc373b --- /dev/null +++ b/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Twenty Years of TiddlyWiki.tid @@ -0,0 +1,9 @@ +title: HelloThumbnail - Twenty Years of TiddlyWiki +tags: HelloThumbnail +color: #D5B7EA +image: Twenty Years of TiddlyWiki +caption: Twenty Years of ~TiddlyWiki +link: History of TiddlyWiki +ribbon-text: NEW + +Celebrating 20 years since the launch of ~TiddlyWiki \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/images/Twenty Years of TiddlyWiki.png b/editions/tw5.com/tiddlers/images/Twenty Years of TiddlyWiki.png new file mode 100644 index 0000000000000000000000000000000000000000..5ac2bbc868cca66beb5c99e5700f6ac64686542d GIT binary patch literal 229204 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�uffEKpL5<!If`MK`xX8|O~bv4&1r2% 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 literal 0 HcmV?d00001 diff --git a/editions/tw5.com/tiddlers/images/Twenty Years of TiddlyWiki.png.meta b/editions/tw5.com/tiddlers/images/Twenty Years of TiddlyWiki.png.meta new file mode 100644 index 000000000..3e782921b --- /dev/null +++ b/editions/tw5.com/tiddlers/images/Twenty Years of TiddlyWiki.png.meta @@ -0,0 +1,4 @@ +title: Twenty Years of TiddlyWiki +type: image/png +tags: picture +alt-text: Screenshot of TiddlyWiki from 20th September 2004 with a banner reading "Twenty Years" From c64e94fdc21529b6c63bd7b1f0f2ddeebc191942 Mon Sep 17 00:00:00 2001 From: Jeremy Ruston <jeremy@jermolene.com> Date: Mon, 23 Sep 2024 12:11:15 +0100 Subject: [PATCH 69/82] Update TiddlyWiki History --- .../tiddlers/about/History of TiddlyWiki.tid | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/editions/tw5.com/tiddlers/about/History of TiddlyWiki.tid b/editions/tw5.com/tiddlers/about/History of TiddlyWiki.tid index e7e94d100..e8cce1d67 100644 --- a/editions/tw5.com/tiddlers/about/History of TiddlyWiki.tid +++ b/editions/tw5.com/tiddlers/about/History of TiddlyWiki.tid @@ -4,9 +4,19 @@ tags: About title: History of TiddlyWiki type: text/vnd.tiddlywiki -//These are personal reflections on the history and development of TiddlyWiki from JeremyRuston.// +! Twenty Years of ~TiddlyWiki -//There is also a [[podcast from 2016|https://changelog.com/podcast/196]] discussing TiddlyWiki's backstory as well as a [[recording from 2021|https://twit.tv/shows/floss-weekly/episodes/620]].// +We've held a number of livestreams to celebrate twenty years of ~TiddlyWiki. You can watch the recordings here: + +* 19th September 2024 - https://youtube.com/live/z9slx92TyrU +* 20th September 2024 - https://youtube.com/live/puFdN-FgOjg +* 21st September 2024 - https://youtube.com/live/0SjsHvwjHGE +* 22nd September 2024 - https://youtube.com/live/oD7Jtq2D4lg + +Some recent podcasts featuring ~TiddlyWiki: + +* The changelog podcast from 2016 - https://changelog.com/podcast/196 discussing ~TiddlyWiki's backstory +* Floss Weekly recording from 2021 - https://twit.tv/shows/floss-weekly/episodes/620 ! Origins of TiddlyWiki From a60e7165d245a47c2c62fed957d8cef4b67dfb9d Mon Sep 17 00:00:00 2001 From: lin onetwo <linonetwo012@gmail.com> Date: Tue, 24 Sep 2024 18:38:39 +0800 Subject: [PATCH 70/82] Feat: loading indicator for tiddlers being lazy loaded (#8505) * feat: basic loading * feat: if condition * feat: use palette * refactor: remove css variable --- core/ui/ViewTemplate/lazy-loading.tid | 10 ++++++++++ core/wiki/tags/ViewTemplate.tid | 2 +- themes/tiddlywiki/vanilla/base.tid | 14 ++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 core/ui/ViewTemplate/lazy-loading.tid diff --git a/core/ui/ViewTemplate/lazy-loading.tid b/core/ui/ViewTemplate/lazy-loading.tid new file mode 100644 index 000000000..dca9553a5 --- /dev/null +++ b/core/ui/ViewTemplate/lazy-loading.tid @@ -0,0 +1,10 @@ +title: $:/core/ui/ViewTemplate/lazy-loading +tags: $:/tags/ViewTemplate + +\whitespace trim +<%if [<currentTiddler>has:field[_is_skinny]] %> + <!-- Render the text to trigger lazy-loading --> + {{||$:/core/ui/ViewTemplate/body/default}} + <!-- Indicator of loading state --> + <div class="tc-tiddler-lazy-loading" /> +<%endif%> diff --git a/core/wiki/tags/ViewTemplate.tid b/core/wiki/tags/ViewTemplate.tid index ab86265a7..8797bf054 100644 --- a/core/wiki/tags/ViewTemplate.tid +++ b/core/wiki/tags/ViewTemplate.tid @@ -1,2 +1,2 @@ title: $:/tags/ViewTemplate -list: [[$:/core/ui/ViewTemplate/title]] [[$:/core/ui/ViewTemplate/unfold]] [[$:/core/ui/ViewTemplate/subtitle]] [[$:/core/ui/ViewTemplate/tags]] [[$:/core/ui/ViewTemplate/classic]] [[$:/core/ui/ViewTemplate/body]] +list: [[$:/core/ui/ViewTemplate/title]] [[$:/core/ui/ViewTemplate/unfold]] [[$:/core/ui/ViewTemplate/subtitle]] [[$:/core/ui/ViewTemplate/tags]] [[$:/core/ui/ViewTemplate/classic]] [[$:/core/ui/ViewTemplate/body]] [[$:/core/ui/ViewTemplate/lazy-loading]] diff --git a/themes/tiddlywiki/vanilla/base.tid b/themes/tiddlywiki/vanilla/base.tid index 4a4867c0b..112233016 100644 --- a/themes/tiddlywiki/vanilla/base.tid +++ b/themes/tiddlywiki/vanilla/base.tid @@ -1201,6 +1201,20 @@ button.tc-btn-invisible.tc-remove-tag-button { color: <<colour muted-foreground>>; } +.tc-tiddler-lazy-loading { + height: 4px; + width: 100%; + background: no-repeat linear-gradient(<<colour background>> 0 0),no-repeat linear-gradient(<<colour background>> 0 0),<<colour primary>>; + background-size: 60% 100%; + animation: animation-loading-progress 3s infinite; +} + +@keyframes animation-loading-progress { + 0% {background-position:-150% 0,-150% 0} + 66% {background-position: 250% 0,-150% 0} + 100% {background-position: 250% 0, 250% 0} +} + .tc-titlebar h2 { font-size: 1em; display: inline; From 678c272979d2ca4813bca7bbb07ce45d82f9e7c2 Mon Sep 17 00:00:00 2001 From: Jeremy Ruston <jeremy@jermolene.com> Date: Tue, 24 Sep 2024 11:48:54 +0100 Subject: [PATCH 71/82] Revert "Improve View Widget Refreshing (#8135)" This reverts commit 6ae00e49732ded39c69c2b8b2291f1654afae0d4. --- core/modules/widgets/view.js | 386 +++++++++-------------------------- 1 file changed, 96 insertions(+), 290 deletions(-) diff --git a/core/modules/widgets/view.js b/core/modules/widgets/view.js index ba0e8e989..070836bff 100755 --- a/core/modules/widgets/view.js +++ b/core/modules/widgets/view.js @@ -18,89 +18,6 @@ var ViewWidget = function(parseTreeNode,options) { this.initialise(parseTreeNode,options); }; -var ViewHandler = function(widget) { - this.wiki = widget.wiki; - this.widget = widget; - this.document = widget.document; -}; - -/* -Base ViewHandler render method -*/ -ViewHandler.prototype.render = function(parent,nextSibling) { - this.text = this.getValue(); - this.createTextNode(parent,nextSibling); -}; - -/* -Base ViewHandler render method for wikified views -*/ -ViewHandler.prototype.renderWikified = function(parent,nextSibling) { - this.createFakeWidget(); - this.text = this.getValue(); - this.createWikifiedTextNode(parent,nextSibling); -}; - -/* -ViewHandler method to create a simple text node -*/ -ViewHandler.prototype.createTextNode = function(parent,nextSibling) { - if(this.text) { - var textNode = this.document.createTextNode(this.text); - parent.insertBefore(textNode,nextSibling); - this.widget.domNodes.push(textNode); - } else { - this.widget.makeChildWidgets(); - this.widget.renderChildren(parent,nextSibling); - } -}; - -/* -ViewHandler method to always create a text node, even if there's no text -*/ -ViewHandler.prototype.createWikifiedTextNode = function(parent,nextSibling) { - var textNode = this.document.createTextNode(this.text || ""); - parent.insertBefore(textNode,nextSibling); - this.widget.domNodes.push(textNode); -}; - -/* -ViewHandler method to create a fake widget used by wikified views -*/ -ViewHandler.prototype.createFakeWidget = function() { - this.fakeWidget = this.wiki.makeTranscludeWidget(this.widget.viewTitle,{ - document: $tw.fakeDocument, - field: this.widget.viewField, - index: this.widget.viewIndex, - parseAsInline: this.widget.viewMode !== "block", - mode: this.widget.viewMode === "block" ? "block" : "inline", - parentWidget: this.widget, - subTiddler: this.widget.viewSubTiddler - }); - this.fakeNode = $tw.fakeDocument.createElement("div"); - this.fakeWidget.makeChildWidgets(); - this.fakeWidget.render(this.fakeNode,null); -}; - -ViewHandler.prototype.refreshWikified = function(changedTiddlers) { - var refreshed = this.fakeWidget.refresh(changedTiddlers); - if(refreshed) { - var newText = this.getValue(); - if(newText !== this.text) { - this.widget.domNodes[0].textContent = newText; - this.text = newText; - } - } - return refreshed; -}; - -/* -Base ViewHandler refresh method -*/ -ViewHandler.prototype.refresh = function(changedTiddlers) { - return false; -}; - /* Inherit from the base widget class */ @@ -113,8 +30,14 @@ ViewWidget.prototype.render = function(parent,nextSibling) { this.parentDomNode = parent; this.computeAttributes(); this.execute(); - this.view = this.getView(this.viewFormat); - this.view.render(parent,nextSibling); + if(this.text) { + var textNode = this.document.createTextNode(this.text); + parent.insertBefore(textNode,nextSibling); + this.domNodes.push(textNode); + } else { + this.makeChildWidgets(); + this.renderChildren(parent,nextSibling); + } }; /* @@ -129,238 +52,49 @@ ViewWidget.prototype.execute = function() { this.viewFormat = this.getAttribute("format","text"); this.viewTemplate = this.getAttribute("template",""); this.viewMode = this.getAttribute("mode","block"); -}; - -/* -Initialise the view subclasses -*/ -ViewWidget.prototype.getView = function(format) { - var View = this.initialiseView(); - View.prototype = Object.create(ViewHandler.prototype); - switch(format) { + switch(this.viewFormat) { case "htmlwikified": - View = this.initialiseHTMLWikifiedView(View); + this.text = this.getValueAsHtmlWikified(this.viewMode); break; case "plainwikified": - View = this.initialisePlainWikifiedView(View); + this.text = this.getValueAsPlainWikified(this.viewMode); break; case "htmlencodedplainwikified": - View = this.initialiseHTMLEncodedPlainWikifiedView(View); + this.text = this.getValueAsHtmlEncodedPlainWikified(this.viewMode); break; case "htmlencoded": - View = this.initialiseHTMLEncodedView(View); + this.text = this.getValueAsHtmlEncoded(); break; case "htmltextencoded": - View = this.initialiseHTMLTextEncodedView(View); + this.text = this.getValueAsHtmlTextEncoded(); break; case "urlencoded": - View = this.initialiseURLEncodedView(View); + this.text = this.getValueAsUrlEncoded(); break; case "doubleurlencoded": - View = this.initialiseDoubleURLEncodedView(View); + this.text = this.getValueAsDoubleUrlEncoded(); break; case "date": - View = this.initialiseDateView(View); + this.text = this.getValueAsDate(this.viewTemplate); break; case "relativedate": - View = this.initialiseRelativeDateView(View); + this.text = this.getValueAsRelativeDate(); break; case "stripcomments": - View = this.initialiseStripCommentsView(View); + this.text = this.getValueAsStrippedComments(); break; case "jsencoded": - View = this.initialiseJSEncodedView(View); + this.text = this.getValueAsJsEncoded(); break; default: // "text" - View = this.initialiseTextView(View); + this.text = this.getValueAsText(); break; - }; - return new View(this); + } }; /* -Return the function to intitialise the view subclass +The various formatter functions are baked into this widget for the moment. Eventually they will be replaced by macro functions */ -ViewWidget.prototype.initialiseView = function() { - return function(widget) { - ViewHandler.call(this,widget); - }; -}; - -/* -Initialise HTML wikified view methods -*/ -ViewWidget.prototype.initialiseHTMLWikifiedView = function(View) { - - View.prototype.render = function(parent,nextSibling) { - this.renderWikified(parent,nextSibling); - }; - - View.prototype.getValue = function() { - return this.fakeNode.innerHTML; - }; - - View.prototype.refresh = function(changedTiddlers) { - return this.refreshWikified(changedTiddlers); - }; - return View; -}; - -/* -Initialise plain wikified view methods -*/ -ViewWidget.prototype.initialisePlainWikifiedView = function(View) { - - View.prototype.render = function(parent,nextSibling) { - this.renderWikified(parent,nextSibling); - }; - - View.prototype.getValue = function() { - return this.fakeNode.textContent; - }; - - View.prototype.refresh = function(changedTiddlers) { - return this.refreshWikified(changedTiddlers); - }; - return View; -}; - -/* -Initialise HTML encoded plain wikified methods -*/ -ViewWidget.prototype.initialiseHTMLEncodedPlainWikifiedView = function(View) { - - View.prototype.render = function(parent,nextSibling) { - this.renderWikified(parent,nextSibling); - }; - - View.prototype.getValue = function() { - return $tw.utils.htmlEncode(this.fakeNode.textContent); - }; - - View.prototype.refresh = function(changedTiddlers) { - return this.refreshWikified(changedTiddlers); - }; - return View; -}; - -/* -Initialise HTML encoded mehods -*/ -ViewWidget.prototype.initialiseHTMLEncodedView = function(View) { - var self = this; - View.prototype.getValue = function() { - return $tw.utils.htmlEncode(self.getValueAsText()); - }; - return View; -}; - -/* -Initialise HTML text encoded mehods -*/ -ViewWidget.prototype.initialiseHTMLTextEncodedView = function(View) { - var self = this; - View.prototype.getValue = function() { - return $tw.utils.htmlTextEncode(self.getValueAsText()); - }; - return View; -}; - -/* -Initialise URL encoded mehods -*/ -ViewWidget.prototype.initialiseURLEncodedView = function(View) { - var self = this; - View.prototype.getValue = function() { - return $tw.utils.encodeURIComponentExtended(self.getValueAsText()); - }; - return View; -}; - -/* -Initialise double URL encoded mehods -*/ -ViewWidget.prototype.initialiseDoubleURLEncodedView = function(View) { - var self = this; - View.prototype.getValue = function() { - return $tw.utils.encodeURIComponentExtended($tw.utils.encodeURIComponentExtended(self.getValueAsText())); - }; - return View; -}; - -/* -Initialise date mehods -*/ -ViewWidget.prototype.initialiseDateView = function(View) { - var self = this; - View.prototype.getValue = function(format) { - format = format || "YYYY MM DD 0hh:0mm"; - var value = $tw.utils.parseDate(self.getValue()); - if(value && $tw.utils.isDate(value) && value.toString() !== "Invalid Date") { - return $tw.utils.formatDateString(value,format); - } else { - return ""; - } - }; - return View; -}; - -/* -Initialise relative date mehods -*/ -ViewWidget.prototype.initialiseRelativeDateView = function(View) { - var self = this; - View.prototype.getValue = function(format) { - var value = $tw.utils.parseDate(self.getValue()); - if(value && $tw.utils.isDate(value) && value.toString() !== "Invalid Date") { - return $tw.utils.getRelativeDate((new Date()) - (new Date(value))).description; - } else { - return ""; - } - }; - return View; -}; - -/* -Initialise stripcomments mehods -*/ -ViewWidget.prototype.initialiseStripCommentsView = function(View) { - var self = this; - View.prototype.getValue = function() { - var lines = self.getValueAsText().split("\n"), - out = []; - for(var line=0; line<lines.length; line++) { - var text = lines[line]; - if(!/^\s*\/\/#/.test(text)) { - out.push(text); - } - } - return out.join("\n"); - }; - return View; -}; - -/* -Initialise JS encoded mehods -*/ -ViewWidget.prototype.initialiseJSEncodedView = function(View) { - var self = this; - View.prototype.getValue = function() { - return $tw.utils.stringify(self.getValueAsText()); - }; - return View; -}; - -/* -Initialise text mehods -*/ -ViewWidget.prototype.initialiseTextView = function(View) { - var self = this; - View.prototype.getValue = function() { - return self.getValueAsText(); - }; - return View; -}; /* Retrieve the value of the widget. Options are: @@ -404,6 +138,78 @@ ViewWidget.prototype.getValueAsText = function() { return this.getValue({asString: true}); }; +ViewWidget.prototype.getValueAsHtmlWikified = function(mode) { + return this.wiki.renderText("text/html","text/vnd.tiddlywiki",this.getValueAsText(),{ + parseAsInline: mode !== "block", + parentWidget: this + }); +}; + +ViewWidget.prototype.getValueAsPlainWikified = function(mode) { + return this.wiki.renderText("text/plain","text/vnd.tiddlywiki",this.getValueAsText(),{ + parseAsInline: mode !== "block", + parentWidget: this + }); +}; + +ViewWidget.prototype.getValueAsHtmlEncodedPlainWikified = function(mode) { + return $tw.utils.htmlEncode(this.wiki.renderText("text/plain","text/vnd.tiddlywiki",this.getValueAsText(),{ + parseAsInline: mode !== "block", + parentWidget: this + })); +}; + +ViewWidget.prototype.getValueAsHtmlEncoded = function() { + return $tw.utils.htmlEncode(this.getValueAsText()); +}; + +ViewWidget.prototype.getValueAsHtmlTextEncoded = function() { + return $tw.utils.htmlTextEncode(this.getValueAsText()); +}; + +ViewWidget.prototype.getValueAsUrlEncoded = function() { + return $tw.utils.encodeURIComponentExtended(this.getValueAsText()); +}; + +ViewWidget.prototype.getValueAsDoubleUrlEncoded = function() { + return $tw.utils.encodeURIComponentExtended($tw.utils.encodeURIComponentExtended(this.getValueAsText())); +}; + +ViewWidget.prototype.getValueAsDate = function(format) { + format = format || "YYYY MM DD 0hh:0mm"; + var value = $tw.utils.parseDate(this.getValue()); + if(value && $tw.utils.isDate(value) && value.toString() !== "Invalid Date") { + return $tw.utils.formatDateString(value,format); + } else { + return ""; + } +}; + +ViewWidget.prototype.getValueAsRelativeDate = function(format) { + var value = $tw.utils.parseDate(this.getValue()); + if(value && $tw.utils.isDate(value) && value.toString() !== "Invalid Date") { + return $tw.utils.getRelativeDate((new Date()) - (new Date(value))).description; + } else { + return ""; + } +}; + +ViewWidget.prototype.getValueAsStrippedComments = function() { + var lines = this.getValueAsText().split("\n"), + out = []; + for(var line=0; line<lines.length; line++) { + var text = lines[line]; + if(!/^\s*\/\/#/.test(text)) { + out.push(text); + } + } + return out.join("\n"); +}; + +ViewWidget.prototype.getValueAsJsEncoded = function() { + return $tw.utils.stringify(this.getValueAsText()); +}; + /* Selectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering */ @@ -413,7 +219,7 @@ ViewWidget.prototype.refresh = function(changedTiddlers) { this.refreshSelf(); return true; } else { - return this.view.refresh(changedTiddlers); + return false; } }; From ae8a6e7fb846fc68f558b3b2afd8c4f63d7c4080 Mon Sep 17 00:00:00 2001 From: Maurycy Zarzycki <maurycy@evidentlycube.com> Date: Tue, 24 Sep 2024 19:11:40 +0200 Subject: [PATCH 72/82] Pl 2024 09 24 (#8631) * Fix accidentally putting Polish translation in English locale * Add translations introduced in c38641157088fdd76b357edf0a71fe250eed2937 --- core/language/en-GB/Misc.multids | 2 +- languages/pl-PL/ControlPanel.multids | 4 ++++ languages/pl-PL/Fields.multids | 2 +- languages/pl-PL/Misc.multids | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/core/language/en-GB/Misc.multids b/core/language/en-GB/Misc.multids index 2a771e090..d8c091375 100644 --- a/core/language/en-GB/Misc.multids +++ b/core/language/en-GB/Misc.multids @@ -42,7 +42,7 @@ Error/RetrievingSkinny: Error retrieving skinny tiddler list Error/SavingToTWEdit: Error saving to TWEdit Error/WhileSaving: Error while saving Error/XMLHttpRequest: XMLHttpRequest error code -Error/ZoominTextNode: Błąd Widoku: Wykryto błędną interakcję z tiddlerem, który wyświetlany jest w niestandardowym kontenerze. Jest to najprawdopodobniej spowodowane użyciem `$:/tags/StoryTiddlerTemplateFilter` z motywem, który ma tekst lub białe znaki na początku. Użyj pragmy `\whitespace trim` i upewnij się, że cała treść tiddlera opakowana jest w jeden element HTML. Tekst, który spowodał problem: +Error/ZoominTextNode: Story View Error: It appears you tried to interact with a tiddler that displays in a custom container. This is most likely caused by using `$:/tags/StoryTiddlerTemplateFilter` with a template that contains text or whitespace at the start. Please use the pragma `\whitespace trim` and ensure the whole contents of the tiddler is wrapped in a single HTML element. The text that caused this issue: InternalJavaScriptError/Title: Internal JavaScript Error InternalJavaScriptError/Hint: Well, this is embarrassing. It is recommended that you restart TiddlyWiki by refreshing your browser LayoutSwitcher/Description: Open the layout switcher diff --git a/languages/pl-PL/ControlPanel.multids b/languages/pl-PL/ControlPanel.multids index 220de0267..9d9a4bf48 100644 --- a/languages/pl-PL/ControlPanel.multids +++ b/languages/pl-PL/ControlPanel.multids @@ -96,6 +96,10 @@ Plugins/PluginWillRequireReload: (wymaga przeładowania) Plugins/Plugins/Caption: Wtyczki Plugins/Plugins/Hint: Wtyczki Plugins/Reinstall/Caption: zainstaluj ponownie +Plugins/Stability/Deprecated: WYCOFANY +Plugins/Stability/Experimental: EKSPERYMENTALNY +Plugins/Stability/Legacy: STARY +Plugins/Stability/Stable: STABILNY Plugins/Themes/Caption: Motywy Plugins/Themes/Hint: Wtyczki z motywami Plugins/Update/Caption: aktualizuj diff --git a/languages/pl-PL/Fields.multids b/languages/pl-PL/Fields.multids index cab393782..d88c82a51 100644 --- a/languages/pl-PL/Fields.multids +++ b/languages/pl-PL/Fields.multids @@ -29,7 +29,7 @@ name: Czytelna nazwa powiązana z tiddlerem wtyczki parent-plugin: Określa nadrzędną wtyczkę plugin-priority: Numeryczna wartość określająca tiddlera wtyczki plugin-type: Typ tiddlera wtyczki -stability: Stan rozwoju wtyczki: wycofany (deprecated), eksperymentalny (experimental), stabilny (stable), stary (legacy) +stability: Stan rozwoju wtyczki: wycofany, eksperymentalny, stabilny, stary revision: Numer rewizji tiddlera przechowywany na serwerze released: Data wydania TiddlyWiki source: URL źródłowy powiązany z tiddlerem diff --git a/languages/pl-PL/Misc.multids b/languages/pl-PL/Misc.multids index 9e26d5897..58bbdd4b1 100644 --- a/languages/pl-PL/Misc.multids +++ b/languages/pl-PL/Misc.multids @@ -42,7 +42,7 @@ Error/RetrievingSkinny: Bład przy pobieraniu listy tiddlerów Error/SavingToTWEdit: Bład przy zapisywaniu do TWEdit Error/WhileSaving: Bład przy zapisywaniu Error/XMLHttpRequest: Kod błedu XMLHttpRequest -Error/ZoominTextNode: Story View Error: It appears you tried to interact with a tiddler that displays in a custom container. This is most likely caused by using `$:/tags/StoryTiddlerTemplateFilter` with a template that contains text or whitespace at the start. Please use the pragma `\whitespace trim` and ensure the whole contents of the tiddler is wrapped in a single HTML element. The text that caused this issue: +Error/ZoominTextNode: Błąd Widoku: Wykryto błędną interakcję z tiddlerem, który wyświetlany jest w niestandardowym kontenerze. Jest to najprawdopodobniej spowodowane użyciem `$:/tags/StoryTiddlerTemplateFilter` z motywem, który ma tekst lub białe znaki na początku. Użyj pragmy `\whitespace trim` i upewnij się, że cała treść tiddlera opakowana jest w jeden element HTML. Tekst, który spowodał problem: InternalJavaScriptError/Title: Wewnętrzny bład JavaScript InternalJavaScriptError/Hint: Ups, to się nie powinno zdarzyć. Zalecamy ponowne uruchomienie TiddlyWiki poprzez odświeżenie strony w przeglądarce. LayoutSwitcher/Description: Otwórzy wybór motywu From 006157ee97ad9a25dd5ec0b0319f4eb7b5113a77 Mon Sep 17 00:00:00 2001 From: Saq Imtiaz <saq.imtiaz@gmail.com> Date: Tue, 24 Sep 2024 19:26:30 +0200 Subject: [PATCH 73/82] Update cla-check.yml to be caseinsensitive --- .github/workflows/cla-check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cla-check.yml b/.github/workflows/cla-check.yml index 72bba1c54..331727b71 100644 --- a/.github/workflows/cla-check.yml +++ b/.github/workflows/cla-check.yml @@ -14,7 +14,7 @@ jobs: if: ${{ (github.event.pull_request.user.login != github.repository_owner) }} steps: - run: | - if ! curl -s https://raw.githubusercontent.com/Jermolene/TiddlyWiki5/tiddlywiki-com/licenses/cla-individual.md | grep -o "@$USER,"; then + if ! curl -s https://raw.githubusercontent.com/Jermolene/TiddlyWiki5/tiddlywiki-com/licenses/cla-individual.md | grep -io "@$USER,"; then echo "CLA not signed" gh pr comment "$NUMBER" -b "@$USER It appears that this is your first contribution to the project, welcome. From bb7556092250c0efc2dd00756184ae49d6cc6e8a Mon Sep 17 00:00:00 2001 From: Mario Pietsch <pmariojo@gmail.com> Date: Wed, 25 Sep 2024 14:02:10 +0200 Subject: [PATCH 74/82] Add basic view-widget tests (#8632) --- ...get-field-format-text-doubleurlencoded.tid | 22 +++++++++++++++ ...ewWidget-field-format-text-htmlencoded.tid | 21 ++++++++++++++ ...dget-field-format-text-htmltextencoded.tid | 21 ++++++++++++++ ...iewWidget-field-format-text-urlencoded.tid | 22 +++++++++++++++ .../view/ViewWidget-field-format-text.tid | 19 +++++++++++++ .../widgets/view/ViewWidget-field-index.tid | 28 +++++++++++++++++++ .../widgets/view/ViewWidget-field-text.tid | 18 ++++++++++++ .../widgets/view/ViewWidget-field-title.tid | 17 +++++++++++ .../view/ViewWidget-format-date-template.tid | 20 +++++++++++++ 9 files changed, 188 insertions(+) create mode 100644 editions/test/tiddlers/tests/data/widgets/view/ViewWidget-field-format-text-doubleurlencoded.tid create mode 100644 editions/test/tiddlers/tests/data/widgets/view/ViewWidget-field-format-text-htmlencoded.tid create mode 100644 editions/test/tiddlers/tests/data/widgets/view/ViewWidget-field-format-text-htmltextencoded.tid create mode 100644 editions/test/tiddlers/tests/data/widgets/view/ViewWidget-field-format-text-urlencoded.tid create mode 100644 editions/test/tiddlers/tests/data/widgets/view/ViewWidget-field-format-text.tid create mode 100644 editions/test/tiddlers/tests/data/widgets/view/ViewWidget-field-index.tid create mode 100644 editions/test/tiddlers/tests/data/widgets/view/ViewWidget-field-text.tid create mode 100644 editions/test/tiddlers/tests/data/widgets/view/ViewWidget-field-title.tid create mode 100644 editions/test/tiddlers/tests/data/widgets/view/ViewWidget-format-date-template.tid diff --git a/editions/test/tiddlers/tests/data/widgets/view/ViewWidget-field-format-text-doubleurlencoded.tid b/editions/test/tiddlers/tests/data/widgets/view/ViewWidget-field-format-text-doubleurlencoded.tid new file mode 100644 index 000000000..3cb11f6eb --- /dev/null +++ b/editions/test/tiddlers/tests/data/widgets/view/ViewWidget-field-format-text-doubleurlencoded.tid @@ -0,0 +1,22 @@ +title: Widgets/ViewWidget/Parameter/field-format-doubleurlencoded +description: Test view-widget parameters tiddler, field and format=* +type: text/vnd.tiddlywiki-multiple +tags: [[$:/tags/wiki-test-spec]] + +title: input + +Some text > "aaa" ++ +title: Output + +<$view tiddler="input" field="text" format="doubleurlencoded"/> +--- +<$view tiddler="input" field="text"/> + ++ +title: ExpectedResult + +<p>Some%2520text%2520%253E%2520%2522aaa%2522 +— +Some text > "aaa" +</p> \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/widgets/view/ViewWidget-field-format-text-htmlencoded.tid b/editions/test/tiddlers/tests/data/widgets/view/ViewWidget-field-format-text-htmlencoded.tid new file mode 100644 index 000000000..fdaae9f43 --- /dev/null +++ b/editions/test/tiddlers/tests/data/widgets/view/ViewWidget-field-format-text-htmlencoded.tid @@ -0,0 +1,21 @@ +title: Widgets/ViewWidget/Parameter/field-format-htmlencoded +description: Test view-widget parameters tiddler, field and format=* +type: text/vnd.tiddlywiki-multiple +tags: [[$:/tags/wiki-test-spec]] + +title: input + +Some text > "aaa" + ++ +title: Output + +<$view tiddler="input" field="text" format="htmlencoded"/> + +<$view tiddler="input" field="text"/> + ++ +title: ExpectedResult + +Some text &gt; &quot;aaa&quot; +Some text > "aaa" diff --git a/editions/test/tiddlers/tests/data/widgets/view/ViewWidget-field-format-text-htmltextencoded.tid b/editions/test/tiddlers/tests/data/widgets/view/ViewWidget-field-format-text-htmltextencoded.tid new file mode 100644 index 000000000..8d1347d77 --- /dev/null +++ b/editions/test/tiddlers/tests/data/widgets/view/ViewWidget-field-format-text-htmltextencoded.tid @@ -0,0 +1,21 @@ +title: Widgets/ViewWidget/Parameter/field-format-htmltextencoded +description: Test view-widget parameters tiddler, field and format=* +type: text/vnd.tiddlywiki-multiple +tags: [[$:/tags/wiki-test-spec]] + +title: input + +Some text > "aaa" + ++ +title: Output + +<$view tiddler="input" field="text" format="htmltextencoded"/> + +<$view tiddler="input" field="text"/> + ++ +title: ExpectedResult + +Some text &gt; "aaa" +Some text > "aaa" diff --git a/editions/test/tiddlers/tests/data/widgets/view/ViewWidget-field-format-text-urlencoded.tid b/editions/test/tiddlers/tests/data/widgets/view/ViewWidget-field-format-text-urlencoded.tid new file mode 100644 index 000000000..f0e5eb948 --- /dev/null +++ b/editions/test/tiddlers/tests/data/widgets/view/ViewWidget-field-format-text-urlencoded.tid @@ -0,0 +1,22 @@ +title: Widgets/ViewWidget/Parameter/field-format-urlencoded +description: Test view-widget parameters tiddler, field and format=* +type: text/vnd.tiddlywiki-multiple +tags: [[$:/tags/wiki-test-spec]] + +title: input + +Some text > "aaa" ++ +title: Output + +<$view tiddler="input" field="text" format="urlencoded"/> +--- +<$view tiddler="input" field="text"/> + ++ +title: ExpectedResult + +<p>Some%20text%20%3E%20%22aaa%22 +— +Some text > "aaa" +</p> \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/widgets/view/ViewWidget-field-format-text.tid b/editions/test/tiddlers/tests/data/widgets/view/ViewWidget-field-format-text.tid new file mode 100644 index 000000000..8dafbdb03 --- /dev/null +++ b/editions/test/tiddlers/tests/data/widgets/view/ViewWidget-field-format-text.tid @@ -0,0 +1,19 @@ +title: Widgets/ViewWidget/Parameter/field-format-text +description: Test view-widget parameters tiddler, field and format=* +type: text/vnd.tiddlywiki-multiple +tags: [[$:/tags/wiki-test-spec]] + +title: input +caption: [[HelloThere]] + +Some text ++ +title: Output + +<$view tiddler="input" field="caption" format="text"/> + +<$view tiddler="input" field="caption"/> ++ +title: ExpectedResult + +[[HelloThere]]<p>[[HelloThere]]</p> \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/widgets/view/ViewWidget-field-index.tid b/editions/test/tiddlers/tests/data/widgets/view/ViewWidget-field-index.tid new file mode 100644 index 000000000..2d7073728 --- /dev/null +++ b/editions/test/tiddlers/tests/data/widgets/view/ViewWidget-field-index.tid @@ -0,0 +1,28 @@ +title: Widgets/ViewWidget/Parameter/field-index +description: Test view-widget parameters index type=application/json and type=application/x-tiddler-dictionary +type: text/vnd.tiddlywiki-multiple +tags: [[$:/tags/wiki-test-spec]] + +title: input +type: application/x-tiddler-dictionary + +01: value 01 +02: value 02 ++ +title: input-json +type: application/json + +{ + "01": "value 01", + "02": "value 02" +} ++ +title: Output + +<$view tiddler="input-json" index="01"/> + +<$view tiddler="input" index="02"/> ++ +title: ExpectedResult + +value 01<p>value 02</p> \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/widgets/view/ViewWidget-field-text.tid b/editions/test/tiddlers/tests/data/widgets/view/ViewWidget-field-text.tid new file mode 100644 index 000000000..b7ebd59a6 --- /dev/null +++ b/editions/test/tiddlers/tests/data/widgets/view/ViewWidget-field-text.tid @@ -0,0 +1,18 @@ +title: Widgets/ViewWidget/Parameter/field-text +description: Test view-widget parameters tiddler and field=text +type: text/vnd.tiddlywiki-multiple +tags: [[$:/tags/wiki-test-spec]] + +title: input + +Some text ++ +title: Output + +<$view tiddler="input" field="text"/> + +<$view tiddler="input" /> ++ +title: ExpectedResult + +Some text<p>Some text</p> \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/widgets/view/ViewWidget-field-title.tid b/editions/test/tiddlers/tests/data/widgets/view/ViewWidget-field-title.tid new file mode 100644 index 000000000..1391c8002 --- /dev/null +++ b/editions/test/tiddlers/tests/data/widgets/view/ViewWidget-field-title.tid @@ -0,0 +1,17 @@ +title: Widgets/ViewWidget/Parameter/field-title +description: Test view-widget parameters tiddler and field=title +type: text/vnd.tiddlywiki-multiple +tags: [[$:/tags/wiki-test-spec]] + +title: input + +Some text ++ +title: Output + +<$view tiddler="input" field="title"/> + ++ +title: ExpectedResult + +input \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/widgets/view/ViewWidget-format-date-template.tid b/editions/test/tiddlers/tests/data/widgets/view/ViewWidget-format-date-template.tid new file mode 100644 index 000000000..493876362 --- /dev/null +++ b/editions/test/tiddlers/tests/data/widgets/view/ViewWidget-format-date-template.tid @@ -0,0 +1,20 @@ +title: Widgets/ViewWidget/Parameter/format-data-template +description: Test view-widget parameters format, date and template +type: text/vnd.tiddlywiki-multiple +tags: [[$:/tags/wiki-test-spec]] + +title: input +modified: 20240920162221000 + +Some text ++ +title: Output + +<!-- This can not be tested atm, since test-server timezone can be different +<$view tiddler="input" field="modified" format="date"/> +--> +<$view tiddler="input" field="modified" format="date" template="[UTC]DDth MMM YYYY at hh12:0mmam"/> ++ +title: ExpectedResult + +<p>20th September 2024 at 4:22pm</p> \ No newline at end of file From 2a77d6afdf1b9daa21f3dbf06e66cc7911353d5f Mon Sep 17 00:00:00 2001 From: Leilei332 <LeiYiXia29@outlook.com> Date: Mon, 30 Sep 2024 20:40:45 +0800 Subject: [PATCH 75/82] Fix confusing empty message in tag dropdown (#8649) --- core/language/en-GB/EditTemplate.multids | 3 ++- core/wiki/macros/tag-picker.tid | 8 ++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/core/language/en-GB/EditTemplate.multids b/core/language/en-GB/EditTemplate.multids index 9b61f71ec..8b2e6e17a 100644 --- a/core/language/en-GB/EditTemplate.multids +++ b/core/language/en-GB/EditTemplate.multids @@ -26,7 +26,8 @@ Tags/ClearInput/Caption: clear input Tags/ClearInput/Hint: Clear tag input Tags/Dropdown/Caption: tag list Tags/Dropdown/Hint: Show tag list -Tags/EmptyMessage: (no search result) +Tags/EmptyMessage: No tags found +Tags/EmptyMessage/System: No system tags found Title/BadCharacterWarning: Warning: avoid using any of the characters <<bad-chars>> in tiddler titles Title/Exists/Prompt: Target tiddler already exists Title/Relink/Prompt: Update ''<$text text=<<fromTitle>>/>'' to ''<$text text=<<toTitle>>/>'' in the //tags// and //list// fields of other tiddlers diff --git a/core/wiki/macros/tag-picker.tid b/core/wiki/macros/tag-picker.tid index 4186f4138..1aeb41e9d 100644 --- a/core/wiki/macros/tag-picker.tid +++ b/core/wiki/macros/tag-picker.tid @@ -77,14 +77,14 @@ The second ESC tries to close the "draft tiddler" <!-- <$action-log /> --> <!-- create dropdown list --> -\procedure tag-picker-listTags(filter, suffix) +\procedure tag-picker-listTags(filter, suffix, empty) <$let userInput=<<_tf.getUserInput>> > <$list filter="[<userInput>minlength{$:/config/Tags/MinLength}limit[1]]" emptyMessage="<div class='tc-search-results'>{{$:/language/Search/Search/TooShort}}</div>" variable="listItem" > <$list filter=<<filter>> variable="tag"> <$list-empty> - <span class="tc-small-gap-left">{{$:/language/EditTemplate/Tags/EmptyMessage}}</span> + <span class="tc-small-gap-left"><<empty>></span> </$list-empty> <!-- The buttonClasses filter is used to define tc-tag-button-selected state --> <!-- tf.get-tagpicker-focus-selector has to be resolved for $:/core/ui/TagPickerTagTemplate, @@ -146,9 +146,9 @@ The second ESC tries to close the "draft tiddler" <div class="tc-block-dropdown-wrapper"> <%if [<tf.tagpicker-dropdown-id>has[text]] %> <div class="tc-block-dropdown tc-block-tags-dropdown"> - <$macrocall $name="tag-picker-listTags" filter=<<nonSystemTagsFilter>> suffix="-primaryList" /> + <$macrocall $name="tag-picker-listTags" filter=<<nonSystemTagsFilter>> suffix="-primaryList" empty={{$:/language/EditTemplate/Tags/EmptyMessage}}/> <hr> - <$macrocall $name="tag-picker-listTags" filter=<<systemTagsFilter>> suffix="-secondaryList" /> + <$macrocall $name="tag-picker-listTags" filter=<<systemTagsFilter>> suffix="-secondaryList" empty={{$:/language/EditTemplate/Tags/EmptyMessage/System}}/> </div> <%endif%> </div> From 36b988c2731ed0d40110a94a3f6203eaf56340b4 Mon Sep 17 00:00:00 2001 From: Leilei332 <LeiYiXia29@outlook.com> Date: Mon, 30 Sep 2024 21:23:29 +0800 Subject: [PATCH 76/82] Gather all the plugins' settings page under the control panel's "Settings" tab. (#8643) --- plugins/tiddlywiki/browser-storage/settings.tid | 2 ++ plugins/tiddlywiki/comments/config.tid | 2 ++ plugins/tiddlywiki/consent-banner/config.tid | 2 ++ plugins/tiddlywiki/dynaview/config.tid | 2 ++ plugins/tiddlywiki/external-attachments/settings.tid | 2 ++ plugins/tiddlywiki/freelinks/settings.tid | 2 ++ plugins/tiddlywiki/geospatial/settings.tid | 2 ++ plugins/tiddlywiki/googleanalytics/settings.tid | 2 ++ plugins/tiddlywiki/katex/config.tid | 2 ++ plugins/tiddlywiki/savetrail/settings.tid | 3 ++- plugins/tiddlywiki/share/settings.tid | 2 ++ plugins/tiddlywiki/tour/settings.tid | 2 ++ 12 files changed, 24 insertions(+), 1 deletion(-) diff --git a/plugins/tiddlywiki/browser-storage/settings.tid b/plugins/tiddlywiki/browser-storage/settings.tid index eb2e27940..6bbdc40c2 100644 --- a/plugins/tiddlywiki/browser-storage/settings.tid +++ b/plugins/tiddlywiki/browser-storage/settings.tid @@ -1,4 +1,6 @@ title: $:/plugins/tiddlywiki/browser-storage/settings +caption: Browser Storage +tags: $:/tags/ControlPanel/SettingsTab ! Disable diff --git a/plugins/tiddlywiki/comments/config.tid b/plugins/tiddlywiki/comments/config.tid index c3edf70fe..6a22db8ca 100644 --- a/plugins/tiddlywiki/comments/config.tid +++ b/plugins/tiddlywiki/comments/config.tid @@ -1,4 +1,6 @@ title: $:/plugins/tiddlywiki/comments/config +caption: Comments +tags: $:/tags/ControlPanel/SettingsTab \define select(description,filter) <$button> diff --git a/plugins/tiddlywiki/consent-banner/config.tid b/plugins/tiddlywiki/consent-banner/config.tid index a62e0f3f1..7e91fccc6 100644 --- a/plugins/tiddlywiki/consent-banner/config.tid +++ b/plugins/tiddlywiki/consent-banner/config.tid @@ -1,4 +1,6 @@ title: $:/plugins/tiddlywiki/consent-banner/config +caption: Consent Banner +tags: $:/tags/ControlPanel/SettingsTab ! [[Greeting Message|$:/config/plugins/tiddlywiki/consent-banner/greeting-message]] diff --git a/plugins/tiddlywiki/dynaview/config.tid b/plugins/tiddlywiki/dynaview/config.tid index 1433c59a1..4024e5f29 100644 --- a/plugins/tiddlywiki/dynaview/config.tid +++ b/plugins/tiddlywiki/dynaview/config.tid @@ -1,4 +1,6 @@ title: $:/plugins/tiddlywiki/dynaview/config +caption: Dynaview +tags: $:/tags/ControlPanel/SettingsTab <$checkbox tiddler="$:/config/DynaView/ViewportDimensions" field="text" checked="yes" unchecked="no" default="no"> Enable dynamic saving of the viewport [[width|$:/state/DynaView/ViewportDimensions/Width]] and [[height|$:/state/DynaView/ViewportDimensions/Height]]</$checkbox> diff --git a/plugins/tiddlywiki/external-attachments/settings.tid b/plugins/tiddlywiki/external-attachments/settings.tid index 1ab3c4e27..a45b46327 100644 --- a/plugins/tiddlywiki/external-attachments/settings.tid +++ b/plugins/tiddlywiki/external-attachments/settings.tid @@ -1,4 +1,6 @@ title: $:/plugins/tiddlywiki/external-attachments/settings +caption: External Attachments +tags: $:/tags/ControlPanel/SettingsTab When used on platforms that provide the necessary support (such as ~TiddlyDesktop), you can optionally import binary files as external tiddlers that reference the original file via the ''_canonical_uri'' field. diff --git a/plugins/tiddlywiki/freelinks/settings.tid b/plugins/tiddlywiki/freelinks/settings.tid index dc4577ab7..70eaae4b3 100644 --- a/plugins/tiddlywiki/freelinks/settings.tid +++ b/plugins/tiddlywiki/freelinks/settings.tid @@ -1,4 +1,6 @@ title: $:/plugins/tiddlywiki/freelinks/settings +caption: Freelinks +tags: $:/tags/ControlPanel/SettingsTab Filter defining tiddlers to which freelinks are made: <$edit-text tiddler="$:/config/Freelinks/TargetFilter" tag="input" placeholder="Filter expression..." default=""/> diff --git a/plugins/tiddlywiki/geospatial/settings.tid b/plugins/tiddlywiki/geospatial/settings.tid index 55854100b..5c3ed0d43 100644 --- a/plugins/tiddlywiki/geospatial/settings.tid +++ b/plugins/tiddlywiki/geospatial/settings.tid @@ -1,4 +1,6 @@ title: $:/plugins/tiddlywiki/geospatial/settings +caption: Geospatial +tags: $:/tags/ControlPanel/SettingsTab ! Geospatial Plugin Settings diff --git a/plugins/tiddlywiki/googleanalytics/settings.tid b/plugins/tiddlywiki/googleanalytics/settings.tid index 7a38ee848..037d225c5 100644 --- a/plugins/tiddlywiki/googleanalytics/settings.tid +++ b/plugins/tiddlywiki/googleanalytics/settings.tid @@ -1,4 +1,6 @@ title: $:/plugins/tiddlywiki/googleanalytics/settings +caption: Google Analytics +tags: $:/tags/ControlPanel/SettingsTab ''[[Google Analytics Measurement ID|$:/GoogleAnalyticsMeasurementID]]'': (mandatory) a code of the form `G-XXXXXXXXXX` where X are digits or uppercase letters<br/><$edit-text tiddler="$:/GoogleAnalyticsMeasurementID" default="" tag="input"/> diff --git a/plugins/tiddlywiki/katex/config.tid b/plugins/tiddlywiki/katex/config.tid index 9e48c1fd8..e08894e69 100644 --- a/plugins/tiddlywiki/katex/config.tid +++ b/plugins/tiddlywiki/katex/config.tid @@ -1,4 +1,6 @@ title: $:/plugins/tiddlywiki/katex/config +caption: KaTeX +tags: $:/tags/ControlPanel/SettingsTab <div class="tc-control-panel"> diff --git a/plugins/tiddlywiki/savetrail/settings.tid b/plugins/tiddlywiki/savetrail/settings.tid index c11ef649a..f1face6ac 100644 --- a/plugins/tiddlywiki/savetrail/settings.tid +++ b/plugins/tiddlywiki/savetrail/settings.tid @@ -1,5 +1,6 @@ title: $:/plugins/tiddlywiki/savetrail/settings - +caption: Save Trail +tags: $:/tags/ControlPanel/SettingsTab <$checkbox tiddler="$:/config/SaveTrailPlugin/enable" field="text" checked="yes" unchecked="no"> Enable automatic saving of modified tiddlers</$checkbox> diff --git a/plugins/tiddlywiki/share/settings.tid b/plugins/tiddlywiki/share/settings.tid index 9f3cc0e1b..d3faf088e 100644 --- a/plugins/tiddlywiki/share/settings.tid +++ b/plugins/tiddlywiki/share/settings.tid @@ -1,4 +1,6 @@ title: $:/plugins/tiddlywiki/share/settings +caption: Share +tags: $:/tags/ControlPanel/SettingsTab !! Base sharing URL diff --git a/plugins/tiddlywiki/tour/settings.tid b/plugins/tiddlywiki/tour/settings.tid index bdb955bee..93112f39b 100644 --- a/plugins/tiddlywiki/tour/settings.tid +++ b/plugins/tiddlywiki/tour/settings.tid @@ -1,4 +1,6 @@ title: $:/plugins/tiddlywiki/tour/settings +caption: Tour +tags: $:/tags/ControlPanel/SettingsTab \import [[$:/plugins/tiddlywiki/tour/variables]] \procedure button-expand-collapse-all(caption,text) From bb462210c3c527aab263bae77e26328642b9ee96 Mon Sep 17 00:00:00 2001 From: Leilei332 <LeiYiXia29@outlook.com> Date: Mon, 30 Sep 2024 21:24:10 +0800 Subject: [PATCH 77/82] Make stability badges in add plugin modal translatable (#8642) A further implementation for #8614 --- core/ui/ControlPanel/Modals/AddPlugins.tid | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core/ui/ControlPanel/Modals/AddPlugins.tid b/core/ui/ControlPanel/Modals/AddPlugins.tid index fe096d6d0..7772f4887 100644 --- a/core/ui/ControlPanel/Modals/AddPlugins.tid +++ b/core/ui/ControlPanel/Modals/AddPlugins.tid @@ -75,13 +75,13 @@ $:/state/add-plugin-info/$(connectionTiddler)$/$(assetInfo)$ <h2><$view tiddler=<<assetInfo>> field="original-title"/></h2> <div> <%if [<assetInfo>get[stability]match[STABILITY_0_DEPRECATED]] %> - <span class="tc-plugin-info-stability tc-plugin-info-stability-deprecated">DEPRECATED</span> + <span class="tc-plugin-info-stability tc-plugin-info-stability-deprecated">{{$:/language/ControlPanel/Plugins/Stability/Deprecated}}</span> <%elseif [<assetInfo>get[stability]match[STABILITY_1_EXPERIMENTAL]] %> - <span class="tc-plugin-info-stability tc-plugin-info-stability-experimental">EXPERIMENTAL</span> + <span class="tc-plugin-info-stability tc-plugin-info-stability-experimental">{{$:/language/ControlPanel/Plugins/Stability/Experimental}}</span> <%elseif [<assetInfo>get[stability]match[STABILITY_2_STABLE]] %> - <span class="tc-plugin-info-stability tc-plugin-info-stability-stable">STABLE</span> + <span class="tc-plugin-info-stability tc-plugin-info-stability-stable">{{$:/language/ControlPanel/Plugins/Stability/Stable}}</span> <%elseif [<assetInfo>get[stability]match[STABILITY_3_LEGACY]] %> - <span class="tc-plugin-info-stability tc-plugin-info-stability-legacy">LEGACY</span> + <span class="tc-plugin-info-stability tc-plugin-info-stability-legacy">{{$:/language/ControlPanel/Plugins/Stability/Legacy}}</span> <%endif%> <em><$view tiddler=<<assetInfo>> field="version"/></em></div> <$list filter="[<assetInfo>get[original-title]get[version]]" variable="installedVersion"><div><em>{{$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint}}</em></div></$list> From 96840b886f4d83e36033a22ef356d89c265d3aca Mon Sep 17 00:00:00 2001 From: Simon Huber <huber.simon@protonmail.com> Date: Mon, 30 Sep 2024 15:26:00 +0200 Subject: [PATCH 78/82] Fix mediatype Typo in excise.js (#8640) This fixes the typo "mediatype" instead of "mediaType" causing a RSOE --- core/modules/editor/operations/text/excise.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/modules/editor/operations/text/excise.js b/core/modules/editor/operations/text/excise.js index bb5840c2e..0753705c5 100644 --- a/core/modules/editor/operations/text/excise.js +++ b/core/modules/editor/operations/text/excise.js @@ -13,7 +13,7 @@ Text editor operation to excise the selection to a new tiddler "use strict"; function isMarkdown(mediaType) { - return mediaType === 'text/markdown' || mediatype === 'text/x-markdown'; + return mediaType === 'text/markdown' || mediaType === 'text/x-markdown'; } exports["excise"] = function(event,operation) { From 3f4067ef7bdef0553cb7030784e439a8f1a00766 Mon Sep 17 00:00:00 2001 From: Saq Imtiaz <saq.imtiaz@gmail.com> Date: Mon, 30 Sep 2024 15:26:36 +0200 Subject: [PATCH 79/82] Fix: variables in functions should not pollute upstream widgets (#8641) --- core/modules/widgets/widget.js | 2 +- .../functions/FunctionFilterrunVariables4.tid | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 editions/test/tiddlers/tests/data/functions/FunctionFilterrunVariables4.tid diff --git a/core/modules/widgets/widget.js b/core/modules/widgets/widget.js index eb84fab4a..b73294654 100755 --- a/core/modules/widgets/widget.js +++ b/core/modules/widgets/widget.js @@ -335,7 +335,7 @@ Widget.prototype.makeFakeWidgetWithVariables = function(variables) { }; } else { opts = opts || {}; - opts.variables = $tw.utils.extend(variables,opts.variables); + opts.variables = $tw.utils.extend({},variables,opts.variables); return self.getVariableInfo(name,opts); }; }, diff --git a/editions/test/tiddlers/tests/data/functions/FunctionFilterrunVariables4.tid b/editions/test/tiddlers/tests/data/functions/FunctionFilterrunVariables4.tid new file mode 100644 index 000000000..d78b211ad --- /dev/null +++ b/editions/test/tiddlers/tests/data/functions/FunctionFilterrunVariables4.tid @@ -0,0 +1,20 @@ +title: Functions/FunctionFilterrunVariables4 +description: Nested functions in filter runs that set variables should not pollute upstream widget tree +type: text/vnd.tiddlywiki-multiple +tags: [[$:/tags/wiki-test-spec]] + +title: Output + +\function .a() [.b[]] +\function .b() [all[]] :map[subtract[1].c[]] +\function .c() [all[]] :map[subtract[1].d[]] +\function .d() [all[]] :map[subtract[1].e[]] +\function .e() [all[]] :map[subtract[1]] + + +<$text text={{{ [[10]] :map:flat[.a[]then<currentTiddler>] }}}/> + ++ +title: ExpectedResult + +10 \ No newline at end of file From 6e4a64b6cda4a8c08316fa001ddbe9def4a9af33 Mon Sep 17 00:00:00 2001 From: Leilei332 <LeiYiXia29@outlook.com> Date: Mon, 30 Sep 2024 21:27:22 +0800 Subject: [PATCH 80/82] Remove deprecated plugins in full edition (#8639) Remove plugins that are marked deprecated in full edition --- editions/full/tiddlywiki.info | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/editions/full/tiddlywiki.info b/editions/full/tiddlywiki.info index b12834645..1df1ecd5a 100644 --- a/editions/full/tiddlywiki.info +++ b/editions/full/tiddlywiki.info @@ -2,15 +2,11 @@ "description": "Full edition, containing all languages, themes and plugins", "plugins": [ "tiddlywiki/bibtex", - "tiddlywiki/blog", "tiddlywiki/browser-sniff", "tiddlywiki/browser-storage", - "tiddlywiki/cecily", "tiddlywiki/classictools", "tiddlywiki/codemirror", "tiddlywiki/comments", - "tiddlywiki/d3", - "tiddlywiki/github-fork-ribbon", "tiddlywiki/help", "tiddlywiki/highlight", "tiddlywiki/innerwiki", @@ -18,7 +14,6 @@ "tiddlywiki/jszip", "tiddlywiki/katex", "tiddlywiki/markdown", - "tiddlywiki/nodewebkitsaver", "tiddlywiki/powered-by-tiddlywiki", "tiddlywiki/qrcode", "tiddlywiki/railroad", @@ -75,4 +70,4 @@ "index": [ "--rendertiddler","$:/core/save/all","index.html","text/plain"] } -} \ No newline at end of file +} From 0aa9cf666929544a772ff9d3927631231719dfca Mon Sep 17 00:00:00 2001 From: Leilei332 <LeiYiXia29@outlook.com> Date: Mon, 30 Sep 2024 21:27:38 +0800 Subject: [PATCH 81/82] Include Polish language in full edition (#8638) Fix the problem that Polish is not included in the full edition --- editions/full/tiddlywiki.info | 1 + 1 file changed, 1 insertion(+) diff --git a/editions/full/tiddlywiki.info b/editions/full/tiddlywiki.info index 1df1ecd5a..ac070eb02 100644 --- a/editions/full/tiddlywiki.info +++ b/editions/full/tiddlywiki.info @@ -45,6 +45,7 @@ "mk-MK", "nl-NL", "pa-IN", + "pl-PL", "pt-PT", "pt-BR", "ru-RU", From 7bf2fee15e57b1f7321e5d65b23e45b534e1374c Mon Sep 17 00:00:00 2001 From: btheado <brian.theado@gmail.com> Date: Mon, 30 Sep 2024 09:49:33 -0400 Subject: [PATCH 82/82] Fix geospatial plugin map state loading (#8511) --- plugins/tiddlywiki/geospatial/widgets/geomap.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/tiddlywiki/geospatial/widgets/geomap.js b/plugins/tiddlywiki/geospatial/widgets/geomap.js index ba2957db2..f1b693c14 100644 --- a/plugins/tiddlywiki/geospatial/widgets/geomap.js +++ b/plugins/tiddlywiki/geospatial/widgets/geomap.js @@ -292,7 +292,7 @@ GeomapWidget.prototype.setMapView = function() { this.map.setMaxZoom($tw.utils.parseInt(this.getAttribute("maxZoom"))); } // Set the view to the content of the state tiddler - var stateTiddler = this.geomapStateTitle && this.wiki.getTiddler(this.geomapStateTitle); + var stateTiddler = this.getAttribute("state") && this.wiki.getTiddler(this.getAttribute("state")); if(stateTiddler) { this.map.setView([$tw.utils.parseNumber(stateTiddler.fields.lat,0),$tw.utils.parseNumber(stateTiddler.fields.long,0)], $tw.utils.parseNumber(stateTiddler.fields.zoom,0)); return true;