From d3cea5d7308666639d7c8dcfb3ebcea990411fa8 Mon Sep 17 00:00:00 2001 From: Leilei332 Date: Tue, 27 Aug 2024 23:41:47 +0800 Subject: [PATCH 001/248] Further fix search outline (#8552) * Fix outline color not showing properly for dark palettes A further fix after #7317 * Tweak outline style for firefox --- themes/tiddlywiki/vanilla/base.tid | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/themes/tiddlywiki/vanilla/base.tid b/themes/tiddlywiki/vanilla/base.tid index a32a9d9e5..ff64ea23e 100644 --- a/themes/tiddlywiki/vanilla/base.tid +++ b/themes/tiddlywiki/vanilla/base.tid @@ -75,12 +75,16 @@ input[type="search"] { outline-offset: initial; } -button, textarea, input, select { - outline-color: <>; +button:focus-visible, input:focus-visible, textarea:focus-visible, select:focus-visible { + outline: 2px solid <>; + outline-offset: -2px; + border-radius: 0.25em; } -:-moz-focusring { +button:-moz-focusring, input:-moz-focusring, textarea:-moz-focusring, select:-moz-focusring { outline: 2px solid <>; + outline-offset: -2px; + border-radius: 0.25em; } /* From c9f816fb5327ffc9e5118cb77ec2c0c0b1383277 Mon Sep 17 00:00:00 2001 From: Bram Chen Date: Wed, 28 Aug 2024 15:39:36 +0800 Subject: [PATCH 002/248] Update chinese language files (#8495) * Update chinese language files * Add chinese translations of control panel UI for social media cards * Update chinese language files * Add chinese translations for Excise/DefaultTitle * Update chinese language files * Improve Simplified Chinese translation for SocialCard/Hint --- languages/zh-Hans/Buttons.multids | 1 + languages/zh-Hans/ControlPanel.multids | 6 ++++++ languages/zh-Hant/Buttons.multids | 1 + languages/zh-Hant/ControlPanel.multids | 6 ++++++ 4 files changed, 14 insertions(+) diff --git a/languages/zh-Hans/Buttons.multids b/languages/zh-Hans/Buttons.multids index 87be34a82..ad7e4ad3b 100644 --- a/languages/zh-Hans/Buttons.multids +++ b/languages/zh-Hans/Buttons.multids @@ -133,6 +133,7 @@ Excise/Caption/Replace/Link: 链接 Excise/Caption/Replace/Transclusion: 嵌入 Excise/Caption/Tag: 将新条目的标签设为此条目的名称 Excise/Caption/TiddlerExists: 提醒:条目已经存在 +Excise/DefaultTitle: 新的剪切 Excise/Hint: 剪切所选文本到一个新条目 Heading1/Caption: 标题 1 Heading1/Hint: 套用标题级别 1 的格式于包含所选文本的列 diff --git a/languages/zh-Hans/ControlPanel.multids b/languages/zh-Hans/ControlPanel.multids index 33bc5e9ce..53d244b3f 100644 --- a/languages/zh-Hans/ControlPanel.multids +++ b/languages/zh-Hans/ControlPanel.multids @@ -199,6 +199,12 @@ Settings/TitleLinks/Caption: 条目标题 Settings/TitleLinks/Hint: 可选地显示条目标题为链接 Settings/TitleLinks/No/Description: 不显示条目标题为链接 Settings/TitleLinks/Yes/Description: 显示条目标题为链接 +SocialCard/Caption: 社交媒体卡 +SocialCard/Domain/Prompt: 显示链接的网域名称(例如 ''tiddlywiki.com'') +SocialCard/Hint: 社交和消息服务使用此信息来显示在线托管时指向此 TiddlyWiki 的链接的预览卡 +SocialCard/PreviewUrl/Prompt: 用于预览此 TiddlyWiki 图像的完整网址 +SocialCard/PreviewUrl/Preview: 预览图像: +SocialCard/Url/Prompt: 此 TiddlyWiki 的完整网址 StoryTiddler/Caption: 故事条目 StoryTiddler/Hint: 此规则级联用于动态选择模板,以便在故事河中显示条目。 StoryView/Caption: 视图模式 diff --git a/languages/zh-Hant/Buttons.multids b/languages/zh-Hant/Buttons.multids index c17974998..1a4c69de1 100644 --- a/languages/zh-Hant/Buttons.multids +++ b/languages/zh-Hant/Buttons.multids @@ -133,6 +133,7 @@ Excise/Caption/Replace/Link: 鏈接 Excise/Caption/Replace/Transclusion: 嵌入 Excise/Caption/Tag: 將新條目的標籤設為此條目的名稱 Excise/Caption/TiddlerExists: 警示:條目已經存在 +Excise/DefaultTitle: 新的剪切 Excise/Hint: 剪切所選文字到一個新條目 Heading1/Caption: 標題 1 Heading1/Hint: 套用標題級別 1 的格式於包含所選文字的列 diff --git a/languages/zh-Hant/ControlPanel.multids b/languages/zh-Hant/ControlPanel.multids index 853ca98d5..37e4a9e81 100644 --- a/languages/zh-Hant/ControlPanel.multids +++ b/languages/zh-Hant/ControlPanel.multids @@ -199,6 +199,12 @@ Settings/TitleLinks/Caption: 條目標題 Settings/TitleLinks/Hint: 可選地顯示條目標題為鏈接 Settings/TitleLinks/No/Description: 不顯示條目標題為鏈接 Settings/TitleLinks/Yes/Description: 顯示條目標題為鏈接 +SocialCard/Caption: 社交媒體卡 +SocialCard/Domain/Prompt: 顯示連結的網域名稱(例如 ''tiddlywiki.com'') +SocialCard/Hint: 社交和訊息服務使用此資訊來顯示線上託管時指向此 TiddlyWiki 的連結的預覽卡 +SocialCard/PreviewUrl/Prompt: 用於預覽此 TiddlyWiki 圖像的完整網址 +SocialCard/PreviewUrl/Preview: 預覽圖像: +SocialCard/Url/Prompt: 此 TiddlyWiki 的完整網址 StoryTiddler/Caption: 故事條目 StoryTiddler/Hint: 此規則級聯用於動態選擇範本,以便在故事河中顯示條目。 StoryView/Caption: 檢視模式 From 6b13614a6a9237d876a326f58357b25f0319554b Mon Sep 17 00:00:00 2001 From: Leilei332 Date: Wed, 28 Aug 2024 22:24:56 +0800 Subject: [PATCH 003/248] Fix duplicated search result in advanced search (#8485) * Fix multiple search result in advanced search * Use $list-empty widget --- core/ui/AdvancedSearch/Standard.tid | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/ui/AdvancedSearch/Standard.tid b/core/ui/AdvancedSearch/Standard.tid index 424d7917f..c0a2ebe3d 100644 --- a/core/ui/AdvancedSearch/Standard.tid +++ b/core/ui/AdvancedSearch/Standard.tid @@ -58,15 +58,15 @@ caption: {{$:/language/Search/Standard/Caption}} configTiddler={{{ [[$:/state/advancedsearch/standard/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}] }}} searchListState="$:/temp/advancedsearch/selected-item"> <$list filter="[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]butfirst[]limit[1]]"> +<$list-empty> +<$list filter='[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]'><$transclude mode="block"/> + <$macrocall $name="tabs" tabsList="[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]" default={{$:/config/SearchResults/Default}} actions="<$action-setfield $tiddler='$:/state/advancedsearch/standard/currentTab' text=<>/>" explicitState="$:/state/tab/search-results/advancedsearch" /> -<$list filter="[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]butfirst[]limit[1]] :else[[]]"> -<$list filter="[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]"><$transclude mode="block"/> - From 7dfdbae812306875bac2445ca4ee505b406e3be1 Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Thu, 29 Aug 2024 17:25:30 +0100 Subject: [PATCH 004/248] Keyboard widget should not crash if the keyboard manager has not been initialised A user reported a problem with using the keyboard widget within a startup action. --- core/modules/widgets/keyboard.js | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/core/modules/widgets/keyboard.js b/core/modules/widgets/keyboard.js index ce3162f51..9515f5a3b 100644 --- a/core/modules/widgets/keyboard.js +++ b/core/modules/widgets/keyboard.js @@ -96,13 +96,15 @@ KeyboardWidget.prototype.execute = function() { this.param = this.getAttribute("param",""); this.key = this.getAttribute("key",""); this.tag = this.getAttribute("tag",""); - this.keyInfoArray = $tw.keyboardManager.parseKeyDescriptors(this.key); - if(this.key.substr(0,2) === "((" && this.key.substr(-2,2) === "))") { - this.shortcutTiddlers = []; - var name = this.key.substring(2,this.key.length -2); - $tw.utils.each($tw.keyboardManager.lookupNames,function(platformDescriptor) { - self.shortcutTiddlers.push("$:/config/" + platformDescriptor + "/" + name); - }); + if($tw.keyboardManager) { + this.keyInfoArray = $tw.keyboardManager.parseKeyDescriptors(this.key); + if(this.key.substr(0,2) === "((" && this.key.substr(-2,2) === "))") { + this.shortcutTiddlers = []; + var name = this.key.substring(2,this.key.length -2); + $tw.utils.each($tw.keyboardManager.lookupNames,function(platformDescriptor) { + self.shortcutTiddlers.push("$:/config/" + platformDescriptor + "/" + name); + }); + } } // Make child widgets this.makeChildWidgets(); @@ -126,7 +128,7 @@ KeyboardWidget.prototype.refresh = function(changedTiddlers) { this.assignDomNodeClasses(); } // Update the keyInfoArray if one of its shortcut-config-tiddlers has changed - if(this.shortcutTiddlers && $tw.utils.hopArray(changedTiddlers,this.shortcutTiddlers)) { + if(this.shortcutTiddlers && $tw.utils.hopArray(changedTiddlers,this.shortcutTiddlers) && $tw.keyboardManager) { this.keyInfoArray = $tw.keyboardManager.parseKeyDescriptors(this.key); } return this.refreshChildren(changedTiddlers); 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 005/248] 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 98d411c08a3511cbed4b0c70422dd2b8bb5d546a Mon Sep 17 00:00:00 2001 From: Leilei332 Date: Fri, 30 Aug 2024 17:39:33 +0800 Subject: [PATCH 006/248] Add empty message to tag picker, search dropdown and advanced search (#8558) * Add empty message to tag picker, search dropdown and advanced search * Add empty message for tag-picker * Use italic font --- core/language/en-GB/EditTemplate.multids | 1 + core/language/en-GB/Search.multids | 2 ++ core/ui/AdvancedSearch/Shadows.tid | 8 ++++++-- core/ui/AdvancedSearch/System.tid | 8 ++++++-- core/ui/DefaultSearchResultList.tid | 4 ++-- core/wiki/macros/tag-picker.tid | 3 +++ 6 files changed, 20 insertions(+), 6 deletions(-) diff --git a/core/language/en-GB/EditTemplate.multids b/core/language/en-GB/EditTemplate.multids index c4bfa5e56..9b61f71ec 100644 --- a/core/language/en-GB/EditTemplate.multids +++ b/core/language/en-GB/EditTemplate.multids @@ -26,6 +26,7 @@ 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) Title/BadCharacterWarning: Warning: avoid using any of the characters <> in tiddler titles Title/Exists/Prompt: Target tiddler already exists Title/Relink/Prompt: Update ''<$text text=<>/>'' to ''<$text text=<>/>'' in the //tags// and //list// fields of other tiddlers diff --git a/core/language/en-GB/Search.multids b/core/language/en-GB/Search.multids index 2a57a6416..f5aa478bf 100644 --- a/core/language/en-GB/Search.multids +++ b/core/language/en-GB/Search.multids @@ -6,6 +6,8 @@ Filter/Hint: Search via a [[filter expression|https://tiddlywiki.com/static/Filt Filter/Matches: //<> matches// Matches: //<> matches// Matches/All: All matches: +Matches/NoMatch: //No match// +Matches/NoResult: //No search result// Matches/Title: Title matches: Search: Search Search/TooShort: Search text too short diff --git a/core/ui/AdvancedSearch/Shadows.tid b/core/ui/AdvancedSearch/Shadows.tid index e2ffa305f..daa8e6c2c 100644 --- a/core/ui/AdvancedSearch/Shadows.tid +++ b/core/ui/AdvancedSearch/Shadows.tid @@ -79,11 +79,15 @@ first-search-filter: [all[shadows]searchsort[title]limit[250]] -[[$:/ <$list filter="[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]" emptyMessage="
{{$:/language/Search/Search/TooShort}}
" variable="listItem"> -<$set name="resultCount" value="<$count filter='[all[shadows]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]]'/>"> +<$set name="resultCount" value={{{ [all[shadows]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]] +[count[]]}}}>
-<> +<% if [match[0]] %> + {{$:/language/Search/Matches/NoMatch}} +<% else %> + <> +<% 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 6804b80a8..ca9584ed7 100644 --- a/core/ui/AdvancedSearch/System.tid +++ b/core/ui/AdvancedSearch/System.tid @@ -78,11 +78,15 @@ first-search-filter: [is[system]searchsort[title]limit[250]] -[[$:/te <$list filter="[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]" emptyMessage="
{{$:/language/Search/Search/TooShort}}
" variable="listItem"> -<$set name="resultCount" value="<$count filter='[is[system]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]] -[[$:/temp/advancedsearch/selected-item]]'/>"> +<$set name="resultCount" value={{{ [is[system]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]] -[[$:/temp/advancedsearch/selected-item]] +[count[]] }}}>
-<> +<% if [match[0]] %> + {{$:/language/Search/Matches/NoMatch}} +<% else %> + <> +<% 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/ui/DefaultSearchResultList.tid b/core/ui/DefaultSearchResultList.tid index 223efe6d7..19b3d7187 100644 --- a/core/ui/DefaultSearchResultList.tid +++ b/core/ui/DefaultSearchResultList.tid @@ -9,7 +9,7 @@ second-search-filter: [!is[system]searchsort[title]limit[250]] //{{$:/language/Search/Matches/Title}}// <$list filter="[minlength[1]]" variable="ignore"> -<$list filter={{{ [get[first-search-filter]] }}}> +<$list filter={{{ [get[first-search-filter]] }}} emptyMessage={{$:/language/Search/Matches/NoResult}}> addsuffix[-primaryList]] -[get[text]] +[then[]else[tc-list-item-selected]] }}}> <$transclude tiddler="$:/core/ui/ListItemTemplate"/> @@ -19,7 +19,7 @@ second-search-filter: [!is[system]searchsort[title]limit[250]] //{{$:/language/Search/Matches/All}}// <$list filter="[minlength[1]]" variable="ignore"> -<$list filter={{{ [get[second-search-filter]] }}}> +<$list filter={{{ [get[second-search-filter]] }}} emptyMessage={{$:/language/Search/Matches/NoResult}}> addsuffix[-secondaryList]] -[get[text]] +[then[]else[tc-list-item-selected]] }}}> <$transclude tiddler="$:/core/ui/ListItemTemplate"/> diff --git a/core/wiki/macros/tag-picker.tid b/core/wiki/macros/tag-picker.tid index 8bd3caf4e..697ac777e 100644 --- a/core/wiki/macros/tag-picker.tid +++ b/core/wiki/macros/tag-picker.tid @@ -83,6 +83,9 @@ The second ESC tries to close the "draft tiddler" emptyMessage="
{{$:/language/Search/Search/TooShort}}
" variable="listItem" > <$list filter=<> variable="tag"> + <$list-empty> + {{$:/language/EditTemplate/Tags/EmptyMessage}} + From 5094096a87b6ee1f3fcaba31e5f1bf0290854891 Mon Sep 17 00:00:00 2001 From: btheado Date: Fri, 30 Aug 2024 09:21:24 -0400 Subject: [PATCH 007/248] 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 008/248] 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 009/248] 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 010/248] 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 011/248] 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 012/248] 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 013/248] 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 014/248] 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 015/248] 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 016/248] 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 017/248] [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 018/248] 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 019/248] 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 020/248] 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 021/248] 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 022/248] 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 023/248] 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 024/248] 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 025/248] 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 026/248] 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 027/248] 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 028/248] 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 029/248] 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 030/248] 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 031/248] 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 032/248] 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 033/248] 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 034/248] 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 035/248] 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 036/248] 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 037/248] 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 038/248] 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 039/248] 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 040/248] 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 041/248] 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 042/248] 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 043/248] 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 044/248] 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 045/248] 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 046/248] 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 047/248] 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 048/248] 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 049/248] 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 050/248] 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 051/248] 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 052/248] 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 053/248] 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 054/248] 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 055/248] 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 056/248] 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 057/248] 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 058/248] 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 059/248] [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 060/248] 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 061/248] 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 062/248] 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 063/248] 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 064/248] 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 065/248] 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 066/248] 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 067/248] 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 068/248] 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 069/248] 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 070/248] 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 071/248] 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 072/248] 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 073/248] 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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 %^e<HTppM3U_)Tn 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�}fnNZkLddNVq@G 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�ZoDgB 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 z�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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 074/248] 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 075/248] 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 076/248] 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 077/248] 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 078/248] 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 501cb7beaa117944bac49c9aa0a2902cf21827f1 Mon Sep 17 00:00:00 2001 From: Mario Pietsch <pmariojo@gmail.com> Date: Wed, 25 Sep 2024 14:01:26 +0200 Subject: [PATCH 079/248] [DOCS] Improve TW Readme structure (#8634) --- .../tw5.com/tiddlers/about/Developers.tid | 26 ++++++++++++++----- .../tw5.com/tiddlers/community/Forums.tid | 16 +++++++----- editions/tw5.com/tiddlers/readme/ReadMe.tid | 20 ++++++++++---- 3 files changed, 44 insertions(+), 18 deletions(-) diff --git a/editions/tw5.com/tiddlers/about/Developers.tid b/editions/tw5.com/tiddlers/about/Developers.tid index 0b54913b7..17f0983e3 100644 --- a/editions/tw5.com/tiddlers/about/Developers.tid +++ b/editions/tw5.com/tiddlers/about/Developers.tid @@ -1,17 +1,29 @@ created: 20150412191004348 -modified: 20201222114745463 +modified: 20240925114810504 tags: Community Reference title: Developers type: text/vnd.tiddlywiki +! [[GitHub Stats|https://github.com/TiddlyWiki/TiddlyWiki5/graphs/contributors]] + There are several resources for developers to learn more about TiddlyWiki and to discuss and contribute to its development. +> [img[https://repobeats.axiom.co/api/embed/5a3bb51fd1ebe84a2da5548f78d2d74e456cebf3.svg]] + * [[tiddlywiki.com/dev|https://tiddlywiki.com/dev]] is the official developer documentation + * Get involved in the [[development on GitHub|https://github.com/TiddlyWiki/TiddlyWiki5]] -** [img[https://repobeats.axiom.co/api/embed/5a3bb51fd1ebe84a2da5548f78d2d74e456cebf3.svg]] -** [[Discussions|https://github.com/TiddlyWiki/TiddlyWiki5/discussions]] are for Q&A and open-ended discussion -** [[Issues|https://github.com/TiddlyWiki/TiddlyWiki5/issues]] are for raising bug reports and proposing specific, actionable new ideas -* The older ~TiddlyWikiDev Google Group is now closed in favour of [[GitHub Discussions|https://github.com/TiddlyWiki/TiddlyWiki5/discussions]] but remains a useful archive: https://groups.google.com/group/TiddlyWikiDev -** An enhanced group search facility is available on [[mail-archive.com|https://www.mail-archive.com/tiddlywikidev@googlegroups.com/]] -* Follow [[@TiddlyWiki on Twitter|http://twitter.com/#!/TiddlyWiki]] for the latest news + +* [[GitHub Discussions|https://github.com/TiddlyWiki/TiddlyWiki5/discussions]] are for Q&A and open-ended discussion +* [[GitHub Issues|https://github.com/TiddlyWiki/TiddlyWiki5/issues]] are for raising bug reports and proposing specific, actionable new ideas + +* The older ~TiddlyWikiDev Google Group is now closed in favour of [[Talk TiddlyWiki|https://talk.tiddlywiki.org/]] and [[GitHub Discussions|https://github.com/TiddlyWiki/TiddlyWiki5/discussions]] +** It remains a useful archive: https://groups.google.com/group/TiddlyWikiDev +*** An enhanced group search facility is available on [[mail-archive.com|https://www.mail-archive.com/tiddlywikidev@googlegroups.com/]] + * Chat at https://gitter.im/TiddlyWiki/public (development room coming soon) + +! Twitter + +* Follow [[@TiddlyWiki on Twitter|http://twitter.com/#!/TiddlyWiki]] for the latest news + diff --git a/editions/tw5.com/tiddlers/community/Forums.tid b/editions/tw5.com/tiddlers/community/Forums.tid index f3baacf21..522390fce 100644 --- a/editions/tw5.com/tiddlers/community/Forums.tid +++ b/editions/tw5.com/tiddlers/community/Forums.tid @@ -1,20 +1,24 @@ created: 20140721121924384 -modified: 20220131165124489 +modified: 20240925113748341 tags: Community title: Forums type: text/vnd.tiddlywiki ! Official Forums -The new official forum for talking about ~TiddlyWiki: requests for help, announcements of new releases and plugins, debating new features, or just sharing experiences. You can participate via the associated website, or subscribe via email. +!! https://talk.tiddlywiki.org/ -https://talk.tiddlywiki.org/ +<<< +The new official forum for talking about ~TiddlyWiki: requests for help, [[announcements|https://talk.tiddlywiki.org/c/announcements/20]] of new releases and plugins, debating new features, or just sharing experiences. You can participate via the associated website, or subscribe via email. -Note that talk.tiddlywiki.org is a community run service that we host and maintain ourselves. The modest running costs are covered by community contributions. +''talk.tiddlywiki.org'' is a community run service that we host and maintain ourselves. The modest running costs are covered by community contributions. +<<< -For the convenience of existing users, we also continue to operate the original ~TiddlyWiki group (hosted on Google Groups since 2005): +!!! Google Groups -https://groups.google.com/group/TiddlyWiki +<<< +For the convenience of existing users, we also continue to operate the original ~TiddlyWiki group (hosted on Google Groups since 2005): https://groups.google.com/group/TiddlyWiki +<<< ! Developer Forums diff --git a/editions/tw5.com/tiddlers/readme/ReadMe.tid b/editions/tw5.com/tiddlers/readme/ReadMe.tid index 2fbf83eab..1455f55d6 100644 --- a/editions/tw5.com/tiddlers/readme/ReadMe.tid +++ b/editions/tw5.com/tiddlers/readme/ReadMe.tid @@ -1,17 +1,23 @@ created: 20131129094758194 -modified: 20140920135213536 +modified: 20240925115259828 title: ReadMe type: text/vnd.tiddlywiki \define tv-wikilink-template() https://tiddlywiki.com/static/$uri_doubleencoded$.html \import [subfilter{$:/core/config/GlobalImportFilter}] +! Welcome + Welcome to TiddlyWiki, a non-linear personal web notebook that anyone can use and keep forever, independently of any corporation. -TiddlyWiki is a complete interactive wiki in JavaScript. It can be used as a single HTML file in the browser or as a powerful Node.js application. It is highly customisable: the entire user interface is itself implemented in hackable WikiText. +~TiddlyWiki is a complete interactive wiki in ~JavaScript. It can be used as a single HTML file in the browser or as a powerful Node.js application. It is highly customisable: the entire user interface is itself implemented in hackable WikiText. + +!! Demo Learn more and see it in action at https://tiddlywiki.com/ +!! Developer Documentation + Developer documentation is in progress at https://tiddlywiki.com/dev/ ! Join the Community @@ -20,15 +26,19 @@ Developer documentation is in progress at https://tiddlywiki.com/dev/ <$transclude mode="block" tiddler="Forums"/> </$vars> -! Installing TiddlyWiki on Node.js +--- + +! Installing ~TiddlyWiki on Node.js + +~TiddlyWiki is a SingleFileApplication, which is easy to use. For advanced users and developers there is a possibility to use a Node.js client / server configuration. This configuration is also used to build the ~TiddlyWiki SinglePageApplication {{Installing TiddlyWiki on Node.js}} -! Using TiddlyWiki on Node.js +! Using ~TiddlyWiki on Node.js {{Using TiddlyWiki on Node.js}} -! Upgrading TiddlyWiki on Node.js +! Upgrading ~TiddlyWiki on Node.js {{Upgrading TiddlyWiki on Node.js}} 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 080/248] 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 53e1cad0d64d493a6531cbb8f4b6566f66b5c0f2 Mon Sep 17 00:00:00 2001 From: Jeremy Ruston <jeremy@jermolene.com> Date: Wed, 25 Sep 2024 19:46:21 +0100 Subject: [PATCH 081/248] Update readme stats Fixes #8633 --- package.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/package.json b/package.json index 77f0201da..4ebf8633d 100644 --- a/package.json +++ b/package.json @@ -36,5 +36,8 @@ "test": "node ./tiddlywiki.js ./editions/test --verbose --version --build index", "lint:fix": "eslint . --fix", "lint": "eslint ." + }, + "dependencies": { + "aws-sdk": "^2.1691.0" } } From ab09d174991522c5b099a142ca2b4f576446b57b Mon Sep 17 00:00:00 2001 From: Jeremy Ruston <jeremy@jermolene.com> Date: Wed, 25 Sep 2024 21:35:17 +0100 Subject: [PATCH 082/248] Revert "Update readme stats" This reverts commit 53e1cad0d64d493a6531cbb8f4b6566f66b5c0f2. --- package.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/package.json b/package.json index 4ebf8633d..77f0201da 100644 --- a/package.json +++ b/package.json @@ -36,8 +36,5 @@ "test": "node ./tiddlywiki.js ./editions/test --verbose --version --build index", "lint:fix": "eslint . --fix", "lint": "eslint ." - }, - "dependencies": { - "aws-sdk": "^2.1691.0" } } From 52cb5763c88467458f3107b34c43e08ac1fdcdaf Mon Sep 17 00:00:00 2001 From: Jeremy Ruston <jeremy@jermolene.com> Date: Wed, 25 Sep 2024 21:35:50 +0100 Subject: [PATCH 083/248] Fixed update readme stats --- editions/tw5.com/tiddlers/about/Developers.tid | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/editions/tw5.com/tiddlers/about/Developers.tid b/editions/tw5.com/tiddlers/about/Developers.tid index 17f0983e3..7ec64f20e 100644 --- a/editions/tw5.com/tiddlers/about/Developers.tid +++ b/editions/tw5.com/tiddlers/about/Developers.tid @@ -8,7 +8,7 @@ type: text/vnd.tiddlywiki There are several resources for developers to learn more about TiddlyWiki and to discuss and contribute to its development. -> [img[https://repobeats.axiom.co/api/embed/5a3bb51fd1ebe84a2da5548f78d2d74e456cebf3.svg]] +> [img[https://repobeats.axiom.co/api/embed/b92b1b363e2b5f26837ae573a60d39b4248b50a0.svg]] * [[tiddlywiki.com/dev|https://tiddlywiki.com/dev]] is the official developer documentation From de15b08b816dee55eb8246b08ab2c036b282fda5 Mon Sep 17 00:00:00 2001 From: Saq Imtiaz <saq.imtiaz@gmail.com> Date: Thu, 26 Sep 2024 15:48:54 +0200 Subject: [PATCH 084/248] Update SystemTag_ $__tags_ClassFilters_PageTemplate.tid (#8635) --- .../systemtags/SystemTag_ $__tags_ClassFilters_PageTemplate.tid | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/editions/tw5.com/tiddlers/systemtags/SystemTag_ $__tags_ClassFilters_PageTemplate.tid b/editions/tw5.com/tiddlers/systemtags/SystemTag_ $__tags_ClassFilters_PageTemplate.tid index dd6a7c699..e4458bedc 100644 --- a/editions/tw5.com/tiddlers/systemtags/SystemTag_ $__tags_ClassFilters_PageTemplate.tid +++ b/editions/tw5.com/tiddlers/systemtags/SystemTag_ $__tags_ClassFilters_PageTemplate.tid @@ -6,4 +6,4 @@ tags: SystemTags title: SystemTag: $:/tags/ClassFilters/PageTemplate type: text/vnd.tiddlywiki -The [[system tag|SystemTags]] `$:/tags/ClassFilters/PageTemplate` marks filters marks filters evaluated to dynamically add their output as CSS classes to the page template. \ No newline at end of file +The [[system tag|SystemTags]] `$:/tags/ClassFilters/PageTemplate` marks filters evaluated to dynamically add their output as CSS classes to the page template. From 459cae2817b74849d667d650442dbafabc2d9484 Mon Sep 17 00:00:00 2001 From: Jeremy Ruston <jeremy@jermolene.com> Date: Thu, 26 Sep 2024 16:31:35 +0100 Subject: [PATCH 085/248] Merge .github directory from master --- .github/ISSUE_TEMPLATE/bug_report.yml | 4 +- .github/ISSUE_TEMPLATE/config.yml | 2 +- .github/workflows/cla-check.yml | 30 ++++++++++++ .github/workflows/cla-signed.yml | 70 +++++++++++++++++++++++++++ 4 files changed, 103 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/cla-check.yml create mode 100644 .github/workflows/cla-signed.yml diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 1e644e161..286a842bc 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -21,7 +21,7 @@ body: attributes: label: To Reproduce description: "Steps to reproduce the behavior:" - value: | + placeholder: | 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' @@ -41,7 +41,7 @@ body: attributes: label: TiddlyWiki Configuration description: please complete the following information - value: | + placeholder: | - Version [e.g. v5.1.24] - Saving mechanism [e.g. Node.js, TiddlyDesktop, TiddlyHost etc] - Plugins installed [e.g. Freelinks, TiddlyMap] diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 556b93919..dca23b783 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,7 +1,7 @@ blank_issues_enabled: false contact_links: - name: Discuss feature request - url: https://github.com/Jermolene/TiddlyWiki5/discussions + url: https://github.com/TiddlyWiki/TiddlyWiki5/discussions about: Open new discussion about new feature - name: Talk.Tiddlywiki Forum url: https://talk.tiddlywiki.org diff --git a/.github/workflows/cla-check.yml b/.github/workflows/cla-check.yml new file mode 100644 index 000000000..331727b71 --- /dev/null +++ b/.github/workflows/cla-check.yml @@ -0,0 +1,30 @@ +name: Check CLA Signature +on: + pull_request_target: + types: + - opened + - reopened + paths-ignore: + - 'licenses/cla-individual.md' +jobs: + check_cla: + runs-on: ubuntu-latest + permissions: + pull-requests: write + 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 -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. + + With apologies for the bureaucracy, please could you prepare a separate PR to the 'tiddlywiki-com' branch with your signature for the Contributor License Agreement (see [contributing.md](https://github.com/TiddlyWiki/TiddlyWiki5/blob/master/contributing.md))." + else + echo "CLA already signed" + gh pr comment "$NUMBER" -b "Confirmed: **$USER** has already signed the Contributor License Agreement (see [contributing.md](https://github.com/TiddlyWiki/TiddlyWiki5/blob/master/contributing.md))" + fi + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_REPO: ${{ github.repository }} + NUMBER: ${{ github.event.pull_request.number }} + USER: ${{ github.actor }} diff --git a/.github/workflows/cla-signed.yml b/.github/workflows/cla-signed.yml new file mode 100644 index 000000000..6783219d1 --- /dev/null +++ b/.github/workflows/cla-signed.yml @@ -0,0 +1,70 @@ +name: CLA Signed + +on: + pull_request_target: + types: + - opened + - closed + paths: + - 'licenses/cla-individual.md' + +env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_REPO: ${{ github.repository }} + NUMBER: ${{ github.event.pull_request.number }} + AUTHOR: ${{ github.event.pull_request.user.login }} + +jobs: + # check if PRs updating the CLA are targetting the tiddlywiki-com branch + check-signature-branch: + if: (github.event.pull_request.merged != true) && (github.event.pull_request.user.login != github.repository_owner) + runs-on: ubuntu-latest + permissions: + pull-requests: write + steps: + - run: | + if ! $BRANCH == "tiddlywiki-com"; then + echo "This CLA signature targets the wrong branch" + gh pr comment "$NUMBER" -b "@$AUTHOR Signatures to the CLA must target the 'tiddlywiki-com' branch." + fi + env: + BRANCH: ${{ github.event.pull_request.base.ref }} + + # leave a comment on each open PR by a given author when their signature is added to the CLA + cla-signed: + if: (github.event.pull_request.merged == true) && (github.event.pull_request.user.login != github.repository_owner) + runs-on: ubuntu-latest + permissions: + pull-requests: write + steps: + - name: List open PRs by user + id: list-prs + uses: actions/github-script@v6 + with: + result-encoding: string + script: | + const owner = context.repo.owner, + repo = context.repo.repo, + author = context.payload.pull_request.user.login; + + const { data: pullRequests } = await github.rest.pulls.list({ + owner: owner, + repo: repo, + state: 'open', + sort: 'created', + direction: 'desc', + per_page: 100 + }); + const userPullRequests = pullRequests.filter(pr => pr.user.login === author), + prNumbers = userPullRequests.map(pr => pr.number).join(','); + console.log(`Open pull requests by ${author}:${prNumbers}`); + return prNumbers; + + - name: Comment open PRs by the same author + run: | + prs=($(echo ${{ steps.list-prs.outputs.result }} | tr "," "\n")) + + for number in "${prs[@]}" + do + gh pr comment "$number" -b "**$AUTHOR** has signed the Contributor License Agreement (see [contributing.md](https://github.com/TiddlyWiki/TiddlyWiki5/blob/master/contributing.md))" + done From 3a9d375fb2fd004987ac1e83af9e8541b07a294a Mon Sep 17 00:00:00 2001 From: Saq Imtiaz <saq.imtiaz@gmail.com> Date: Mon, 30 Sep 2024 09:46:54 +0200 Subject: [PATCH 086/248] Fix: syntax issues with checking target branch for CLA signatures (#8648) --- .github/workflows/cla-signed.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/cla-signed.yml b/.github/workflows/cla-signed.yml index 6783219d1..01d57d014 100644 --- a/.github/workflows/cla-signed.yml +++ b/.github/workflows/cla-signed.yml @@ -23,8 +23,8 @@ jobs: pull-requests: write steps: - run: | - if ! $BRANCH == "tiddlywiki-com"; then - echo "This CLA signature targets the wrong branch" + if [[ "$BRANCH" != "tiddlywiki-com" ]]; then + echo "This CLA signature targets the wrong branch: $BRANCH" gh pr comment "$NUMBER" -b "@$AUTHOR Signatures to the CLA must target the 'tiddlywiki-com' branch." fi env: From 1e6d7b030f080f4f3953520427d4738ead77d269 Mon Sep 17 00:00:00 2001 From: IchijikuIchigo <amaou.toyomitsuhime@gmail.com> Date: Mon, 30 Sep 2024 16:58:04 +0900 Subject: [PATCH 087/248] Signing the CLA (#8647) --- licenses/cla-individual.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/licenses/cla-individual.md b/licenses/cla-individual.md index ecabb96fd..be6bf619d 100644 --- a/licenses/cla-individual.md +++ b/licenses/cla-individual.md @@ -589,3 +589,5 @@ Val Packett, @valpackett, 2024/07/26 @wolfsprite, 2024/08/09 @JDIGIO0213, 2024/08/29 + +@IchijikuIchigo, 2024/09/29 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 088/248] 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 089/248] 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 090/248] 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 091/248] 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 092/248] 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 093/248] 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 094/248] 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 fc197e1bfa5082f315384813600f24fde36e3148 Mon Sep 17 00:00:00 2001 From: "j. redhead" <jeremyredhead@users.noreply.github.com> Date: Mon, 30 Sep 2024 08:28:41 -0500 Subject: [PATCH 095/248] Improve documentation of how to disable CamelCase (#8626) --- editions/tw5.com/tiddlers/definitions/CamelCase.tid | 10 +++++++--- .../howtos/How_to_turn_off_camel_case_linking.tid | 10 ++++++++-- editions/tw5.com/tiddlers/pragmas/Pragma_ _rules.tid | 6 +++--- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/editions/tw5.com/tiddlers/definitions/CamelCase.tid b/editions/tw5.com/tiddlers/definitions/CamelCase.tid index b0847ac6d..1d29548e5 100644 --- a/editions/tw5.com/tiddlers/definitions/CamelCase.tid +++ b/editions/tw5.com/tiddlers/definitions/CamelCase.tid @@ -1,6 +1,10 @@ -created: 201308281853 -modified: 201308281853 +created: 20130828185300000 +modified: 20240923162029767 tags: Definitions title: CamelCase -CamelCase is formed by taking a phrase, capitalising the initial letter of each word, and smashing the words together to form a portmanteau word. Most wikis use CamelCase to signal phrases that should automatically become links. +CamelCase is formed by taking a phrase, capitalising the initial letter of each word, and smashing the words together to form a portmanteau word. Traditionally most wikis including ~TiddlyWiki use CamelCase to signal phrases that should automatically become links. + +You can also [[disable CamelCase linking in TiddlyWiki|How to turn off camel case linking]] if you want. + +<<.from-version 5.3.0>> ~CamelCase is disabled by default in new wikis. diff --git a/editions/tw5.com/tiddlers/howtos/How_to_turn_off_camel_case_linking.tid b/editions/tw5.com/tiddlers/howtos/How_to_turn_off_camel_case_linking.tid index dca2be398..35b8bb2f4 100644 --- a/editions/tw5.com/tiddlers/howtos/How_to_turn_off_camel_case_linking.tid +++ b/editions/tw5.com/tiddlers/howtos/How_to_turn_off_camel_case_linking.tid @@ -1,5 +1,5 @@ created: 20161209172820513 -modified: 20170204191306382 +modified: 20240923161828376 tags: [[Customise TiddlyWiki]] Learning title: How to turn off camel case linking type: text/vnd.tiddlywiki @@ -8,12 +8,18 @@ CamelCase is used in most Wikis, but it can interfere with text presentation in !! Turning off Camel Case locally -To turn off a particular instance of a CamelCase text, simply put a tilde (~) in front of the word, like this: +To prevent a particular CamelCase word from being linked, simply put a tilde (~) in front of the word, like this: ``` ~CamelCase ``` +If you need to disable CamelCase for just an entire tiddler, you can use the [[\rules pragma|Pragma: \rules]]: + +``` +\rules except wikilink +``` + !! Turning off Camel Case globally To turn off CamelCase in all tiddlers, navigate to the [[Control Panel|$:/ControlPanel]]. Select the `Settings` tab and then scroll or read down to the ``Camel Case Wiki Links`` section and unselect ``Enable automatic CamelCase linking``. \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/pragmas/Pragma_ _rules.tid b/editions/tw5.com/tiddlers/pragmas/Pragma_ _rules.tid index 56aa4d665..ef62ae994 100644 --- a/editions/tw5.com/tiddlers/pragmas/Pragma_ _rules.tid +++ b/editions/tw5.com/tiddlers/pragmas/Pragma_ _rules.tid @@ -1,5 +1,5 @@ created: 20220917112931273 -modified: 20230724184044642 +modified: 20240923161726957 tags: Pragmas title: Pragma: \rules type: text/vnd.tiddlywiki @@ -18,8 +18,8 @@ For example, in stylesheets it is typical to only use the rules associated with \rules only filteredtranscludeinline transcludeinline macrodef macrocallinline ``` -Some users prefer not to use CamelCase links: +Disable CamelCase for just one tiddler: ``` -\rules except prettylink +\rules except wikilink ``` \ No newline at end of file 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 096/248] 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; From fca39c7f72a97724c18fdb6b3ddecc9bd08a97a6 Mon Sep 17 00:00:00 2001 From: Mario Pietsch <pmariojo@gmail.com> Date: Tue, 1 Oct 2024 14:16:39 +0200 Subject: [PATCH 097/248] Remove function wrapper (#8625) * remove function wrapper * add back anonymous function to sjcl.tid --- plugins/tiddlywiki/aws/modules/command.js | 5 ----- plugins/tiddlywiki/aws/modules/encodings.js | 4 ---- plugins/tiddlywiki/aws/modules/init.js | 4 ---- plugins/tiddlywiki/aws/modules/utils.js | 4 ---- 4 files changed, 17 deletions(-) diff --git a/plugins/tiddlywiki/aws/modules/command.js b/plugins/tiddlywiki/aws/modules/command.js index 880eea924..2846f24d8 100644 --- a/plugins/tiddlywiki/aws/modules/command.js +++ b/plugins/tiddlywiki/aws/modules/command.js @@ -6,8 +6,6 @@ module-type: command --aws command \*/ -(function(){ - /*jslint node: true, browser: true */ /*global $tw: false */ "use strict"; @@ -238,6 +236,3 @@ Command.prototype.subCommands["s3-savetiddlers"] = function() { }; exports.Command = Command; - -})(); - diff --git a/plugins/tiddlywiki/aws/modules/encodings.js b/plugins/tiddlywiki/aws/modules/encodings.js index f67fded27..cc1068ee6 100644 --- a/plugins/tiddlywiki/aws/modules/encodings.js +++ b/plugins/tiddlywiki/aws/modules/encodings.js @@ -6,8 +6,6 @@ module-type: filteroperator Filter operator for applying encodeuricomponent() to each item, with the addition of converting single quotes to %27, as required by AWS \*/ -(function(){ - /*jslint node: true, browser: true */ /*global $tw: false */ "use strict"; @@ -23,5 +21,3 @@ exports["aws-encodeuricomponent"] = function(source,operator,options) { }); return results; }; - -})(); diff --git a/plugins/tiddlywiki/aws/modules/init.js b/plugins/tiddlywiki/aws/modules/init.js index b0b7d3c71..34db71abe 100644 --- a/plugins/tiddlywiki/aws/modules/init.js +++ b/plugins/tiddlywiki/aws/modules/init.js @@ -6,8 +6,6 @@ module-type: startup AWS initialisation \*/ -(function(){ - /*jslint node: true, browser: true */ /*global $tw: false */ "use strict"; @@ -33,5 +31,3 @@ exports.startup = function() { logger.alert("The plugin 'tiddlywiki/aws' requires the 'tiddlywiki/jszip' plugin to be installed"); } }; - -})(); diff --git a/plugins/tiddlywiki/aws/modules/utils.js b/plugins/tiddlywiki/aws/modules/utils.js index d57546aeb..a4b2ccdfb 100644 --- a/plugins/tiddlywiki/aws/modules/utils.js +++ b/plugins/tiddlywiki/aws/modules/utils.js @@ -6,8 +6,6 @@ module-type: library AWS utility functions \*/ -(function(){ - /*jslint node: true, browser: true */ /*global $tw: false */ "use strict"; @@ -72,5 +70,3 @@ function putFile(region,bucketName,title,text,type,callback) { exports.putFile = putFile; exports.getFile = getFile; - -})(); From 2dd8ff95b22ab9daf77d13d833770bf585d13d91 Mon Sep 17 00:00:00 2001 From: Leilei332 <LeiYiXia29@outlook.com> Date: Wed, 2 Oct 2024 19:42:49 +0800 Subject: [PATCH 098/248] Fix github fork ribbon plugin marked as deprecated & add it back to full edition. (#8656) --- editions/full/tiddlywiki.info | 1 + plugins/tiddlywiki/github-fork-ribbon/plugin.info | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/editions/full/tiddlywiki.info b/editions/full/tiddlywiki.info index ac070eb02..94f4c88bf 100644 --- a/editions/full/tiddlywiki.info +++ b/editions/full/tiddlywiki.info @@ -7,6 +7,7 @@ "tiddlywiki/classictools", "tiddlywiki/codemirror", "tiddlywiki/comments", + "tiddlywiki/github-fork-ribbon", "tiddlywiki/help", "tiddlywiki/highlight", "tiddlywiki/innerwiki", diff --git a/plugins/tiddlywiki/github-fork-ribbon/plugin.info b/plugins/tiddlywiki/github-fork-ribbon/plugin.info index 8b3f4385a..7674e5fc5 100644 --- a/plugins/tiddlywiki/github-fork-ribbon/plugin.info +++ b/plugins/tiddlywiki/github-fork-ribbon/plugin.info @@ -4,5 +4,5 @@ "description": "GitHub-inspired corner ribbon", "author": "Simon Whitaker", "list": "readme usage", - "stability": "STABILITY_0_DEPRECATED" + "stability": "STABILITY_2_STABLE" } From d981e45e15f8fecf3944bcbb48ab8d714b44bad8 Mon Sep 17 00:00:00 2001 From: Joe Bordes <joe@tsolucio.com> Date: Wed, 2 Oct 2024 14:00:04 +0200 Subject: [PATCH 099/248] i18n(ES) update to latest code base (#8653) --- ...ning_the_Contributor_License_Agreement.tid | 2 +- editions/es-ES/tiddlers/Tutorials.tid | 2 +- languages/es-ES/Buttons.multids | 5 +++++ languages/es-ES/ControlPanel.multids | 20 +++++++++++++++++++ languages/es-ES/Docs/ModuleTypes.multids | 2 +- languages/es-ES/Docs/PaletteColours.multids | 7 +++++++ languages/es-ES/EditTemplate.multids | 2 ++ languages/es-ES/Fields.multids | 2 ++ languages/es-ES/Help/commands.tid | 2 +- languages/es-ES/Misc.multids | 4 ++-- languages/es-ES/Search.multids | 2 ++ .../es-ES/Snippets/FunctionDefinition.tid | 7 +++++++ .../es-ES/Snippets/ProcedureDefinition.tid | 7 +++++++ languages/es-ES/Types/image_svg_xml.tid | 2 +- .../Types/text_vnd.tiddlywiki_multiple.tid | 5 +++++ languages/es-ES/plugin.info | 2 +- 16 files changed, 65 insertions(+), 8 deletions(-) create mode 100644 languages/es-ES/Snippets/FunctionDefinition.tid create mode 100644 languages/es-ES/Snippets/ProcedureDefinition.tid create mode 100644 languages/es-ES/Types/text_vnd.tiddlywiki_multiple.tid diff --git a/editions/es-ES/tiddlers/Signing_the_Contributor_License_Agreement.tid b/editions/es-ES/tiddlers/Signing_the_Contributor_License_Agreement.tid index 2ed039471..cbe0dc065 100644 --- a/editions/es-ES/tiddlers/Signing_the_Contributor_License_Agreement.tid +++ b/editions/es-ES/tiddlers/Signing_the_Contributor_License_Agreement.tid @@ -13,7 +13,7 @@ Crea un //pull request// en GitHub para añadir tu nombre a `cla-individual.md` # Según seas persona física o fiscal, ve a #*[[licenses/CLA-individual|https://github.com/TiddlyWiki/TiddlyWiki5/tree/master/licenses/cla-individual.md]] o a -#*[[licenses/CLA-entity|https://github.com/TiddlyWiki/TiddlyWiki5/tree/master/licenses/cla-entity.md]] +#*[[licenses/CLA-entity|https://github.com/TiddlyWiki/TiddlyWiki5/tree/master/licenses/cla-entity.md]] #Haz clic en el botón ''Edit'' arriba a la derecha (al hacerlo se creará un fork del repositorio para que puedas editar el archivo) diff --git a/editions/es-ES/tiddlers/Tutorials.tid b/editions/es-ES/tiddlers/Tutorials.tid index afa2d7696..092cf5c66 100644 --- a/editions/es-ES/tiddlers/Tutorials.tid +++ b/editions/es-ES/tiddlers/Tutorials.tid @@ -8,7 +8,7 @@ type: text/vnd.tiddlywiki Páginas con tutoriales y consejos relacionados con ~TiddlyWiki. -Envía más tutoriales que encuentres para ampliar esta lista via [[GitHub|https://github.com/TiddlyWiki/TiddlyWiki5]] o [[Twitter|https://twitter.com/tiddlywiki]], o publícalas en el [[grupo|https://groups.google.com/forum/?hl=es#!forum/tiddlywiki]] +Envía más tutoriales que encuentres para ampliar esta lista via [[GitHub|https://github.com/TiddlyWiki/TiddlyWiki5]] o [[Twitter|https://twitter.com/tiddlywiki]], o publícalas en el [[foro|https://talk.tiddlywiki.org/]] <div class="tc-link-info"> diff --git a/languages/es-ES/Buttons.multids b/languages/es-ES/Buttons.multids index 5ee88ead4..b5f5cc086 100644 --- a/languages/es-ES/Buttons.multids +++ b/languages/es-ES/Buttons.multids @@ -28,6 +28,7 @@ Encryption/ClearPassword/Caption: Borrar contraseña Encryption/ClearPassword/Hint: Borra la contraseña actual y guarda este wiki sin cifrar Encryption/SetPassword/Caption: Asignar contraseña Encryption/SetPassword/Hint: Asigna contraseña de cifrado +EmergencyDownload/Caption: descargar tiddlers como json ExportPage/Caption: Exportar todos ExportPage/Hint: Exporta todos los tiddlers ExportTiddler/Caption: Exportar tiddler @@ -79,6 +80,7 @@ NewMarkdown/Caption: Nuevo tiddler en Markdown NewMarkdown/Hint: Crea un nuevo tiddler en Markdown NewTiddler/Caption: Nuevo tiddler NewTiddler/Hint: Crea un tiddler nuevo +OpenControlPanel/Hint: Abrir panel de control OpenWindow/Caption: Abrir en ventana nueva OpenWindow/Hint: Abre el tiddler en una nueva ventana Palette/Caption: Paleta @@ -103,6 +105,8 @@ ShowSideBar/Caption: Mostrar barra lateral ShowSideBar/Hint: Muestra la barra lateral TagManager/Caption: Administrador de etiquetas TagManager/Hint: Abre el gestor de etiquetas +TestCaseImport/Caption: importar tiddlers +TestCaseImport/Hint: Importar tiddlers Timestamp/Caption: Marcas de tiempo Timestamp/Hint: Elige si las modificaciones actualizan las marcas de tiempo Timestamp/On/Caption: las marcas de tiempo están activadas @@ -129,6 +133,7 @@ Excise/Caption/Replace/Link: enlace Excise/Caption/Replace/Transclusion: transclusión Excise/Caption/Tag: Etiqueta el nuevo tiddler con el título de este Excise/Caption/TiddlerExists: ¡Atención! El tiddler ya existe +Excise/DefaultTitle: Nueva Escisión Excise/Hint: Corta el texto seleccionado y lo pega en un tiddler nuevo Heading1/Caption: Encabezamiento 1 Heading1/Hint: Aplica formato de encabezamiento 1 a la selección diff --git a/languages/es-ES/ControlPanel.multids b/languages/es-ES/ControlPanel.multids index 455318e87..2c9401fe7 100644 --- a/languages/es-ES/ControlPanel.multids +++ b/languages/es-ES/ControlPanel.multids @@ -96,6 +96,10 @@ Plugins/PluginWillRequireReload: (requiere recarga) Plugins/Plugins/Caption: Complementos Plugins/Plugins/Hint: Complementos y extensiones Plugins/Reinstall/Caption: Reinstalar +Plugins/Stability/Deprecated: OBSOLETO +Plugins/Stability/Experimental: EXPERIMENTAL +Plugins/Stability/Legacy: HEREDADO +Plugins/Stability/Stable: ESTABLE Plugins/Themes/Caption: Temas Plugins/Themes/Hint: Extensiones de tema Plugins/Update/Caption: actualizar @@ -198,6 +202,12 @@ Settings/TitleLinks/Yes/Description: Mostrar como enlaces Settings/MissingLinks/Caption: Enlaces Wiki Settings/MissingLinks/Hint: Elige si quieres vincular a tiddlers que aún no existen Settings/MissingLinks/Description: Habilitar enlaces a tiddlers inexistentes +SocialCard/Caption: Tarjeta Red Social +SocialCard/Domain/Prompt: Nombre de dominio que se mostrará para el enlace (por ejemplo, ''tiddlywiki.com'') +SocialCard/Hint: Esta información es utilizada por los servicios de redes sociales y mensajería para mostrar una tarjeta de vista previa para los enlaces a este TiddlyWiki cuando se aloja en línea +SocialCard/PreviewUrl/Prompt: URL completa para obtener una vista previa de la imagen de este TiddlyWiki +SocialCard/PreviewUrl/Preview: Imagen de vista previa: +SocialCard/Url/Prompt: URL completa de este TiddlyWiki StoryTiddler/Caption: Tiddler de Historia StoryTiddler/Hint: Esta cascada de reglas se usa para elegir dinámicamente la plantilla para mostrar un tiddler en el río de la historia. StoryView/Caption: Vista @@ -206,6 +216,12 @@ Stylesheets/Caption: Hojas de estilo Stylesheets/Expand/Caption: Expandir todo Stylesheets/Hint: Este es el CSS renderizado de los tiddlers CSS etiquetados con <<tag "$:/tags/Stylesheet">> Stylesheets/Restore/Caption: Restaurar +TestCases/Caption: Casos de Prueba +TestCases/Hint: Los casos de prueba son ejemplos independientes para probar y aprender +TestCases/All/Caption: Todos los casos de prueba +TestCases/All/Hint: Todos los casos de prueba +TestCases/Failed/Caption: Casos de prueba fallidos +TestCases/Failed/Hint: Solo casos de prueba fallidos Theme/Caption: Tema Theme/Prompt: Tema actual TiddlerFields/Caption: Campos de tiddler @@ -229,3 +245,7 @@ ViewTemplateBody/Caption: Ver el Cuerpo de la Plantilla ViewTemplateBody/Hint: La plantilla de vista predeterminada utiliza esta cascada de reglas para elegir dinámicamente la plantilla para mostrar el cuerpo de un tiddler. ViewTemplateTitle/Caption: Ver el Título de la Plantilla ViewTemplateTitle/Hint: La plantilla de vista predeterminada utiliza esta cascada de reglas para elegir dinámicamente la plantilla para mostrar el título de un tiddler. +ViewTemplateSubtitle/Caption: Ver Subtítulo de Plantilla +ViewTemplateSubtitle/Hint: La plantilla de vista predeterminada utiliza esta regla en cascada para elegir dinámicamente la plantilla para mostrar el subtítulo de un tiddler. +ViewTemplateTags/Caption: Ver Etiquetas de Plantilla +ViewTemplateTags/Hint: La plantilla de vista predeterminada utiliza esta regla en cascada para elegir dinámicamente la plantilla para mostrar el área de etiquetas de un tiddler. diff --git a/languages/es-ES/Docs/ModuleTypes.multids b/languages/es-ES/Docs/ModuleTypes.multids index 3c165dbc9..73f7ac104 100644 --- a/languages/es-ES/Docs/ModuleTypes.multids +++ b/languages/es-ES/Docs/ModuleTypes.multids @@ -9,7 +9,7 @@ config: Datos para insertar en `$tw.config` filteroperator: Operadores individuales de filtrado global: Datos globales para insertar en `$tw` info: Publica información del sistema a través del pseudo-complemento [[$:/temp/info-plugin]]. -isfilteroperator: Operandos para el operador ''is'' +isfilteroperator: Parámetros para el operador ''is'' library: Tipo de módulo genérico para módulos JavaScript de propósito general. macro: Definiciones macro de JavaScript. parser: Reglas sintácticas para diversos tipos de contenido. diff --git a/languages/es-ES/Docs/PaletteColours.multids b/languages/es-ES/Docs/PaletteColours.multids index 361aa1d39..7428e9a4e 100644 --- a/languages/es-ES/Docs/PaletteColours.multids +++ b/languages/es-ES/Docs/PaletteColours.multids @@ -65,6 +65,13 @@ sidebar-tab-foreground-selected: Divisor de pestañas de la barra lateral para l sidebar-tab-foreground: Primario de la pestaña de la barra lateral sidebar-tiddler-link-foreground-hover: Primario enlace tiddler en la barra lateral al pasar por encima sidebar-tiddler-link-foreground: Primario enlace tiddler en la barra lateral +stability-stable: Distintivo para el nivel de estabilidad "estable" +stability-experimental: Distintivo para el nivel de estabilidad "experimental" +stability-deprecated: Distintivo para el nivel de estabilidad "obsoleto" +stability-legacy: Distintivo para el nivel de estabilidad "heredado" +testcase-accent-level-1: Color de énfasis del caso de prueba sin anidación +testcase-accent-level-2: Color de énfasis del caso de prueba con anidación de segundo nivel +testcase-accent-level-3: Color de énfasis del caso de prueba con anidación de tercer nivel o superior site-title-foreground: Primario título sitio static-alert-foreground: Primario de alerta estática tab-background-selected: Fondo de pestaña para pestañas seleccionadas diff --git a/languages/es-ES/EditTemplate.multids b/languages/es-ES/EditTemplate.multids index b25a98dbb..edbebcdde 100644 --- a/languages/es-ES/EditTemplate.multids +++ b/languages/es-ES/EditTemplate.multids @@ -26,6 +26,8 @@ Tags/ClearInput/Caption: vaciar campo Tags/ClearInput/Hint: Vacia campo etiqueta Tags/Dropdown/Caption: Etiquetas Tags/Dropdown/Hint: Muestra la lista de etiquetas existentes +Tags/EmptyMessage: No se encontraron etiquetas +Tags/EmptyMessage/System: No se encontraron etiquetas del sistema Title/BadCharacterWarning: Advertencia: evita usar cualquiera de los caracteres <<bad-chars>> en los títulos de tiddler Title/Exists/Prompt: El tiddler de destino ya existe Title/Relink/Prompt: Actualizar ''<$text text=<<fromTitle>>/>'' a ''<$text text=<<toTitle>>/>'' en los campos //tags// y //list// de otros tiddlers diff --git a/languages/es-ES/Fields.multids b/languages/es-ES/Fields.multids index 4ea73213e..ec139d75b 100644 --- a/languages/es-ES/Fields.multids +++ b/languages/es-ES/Fields.multids @@ -4,6 +4,7 @@ _canonical_uri: Dirección (URI) completa -absoluta o relativa- de un tiddler ex author: Nombre del autor de un plugin bag: Nombre de la bolsa de la que procede un tiddler caption: Texto que se muestra en una pestaña o botón, con independencia del título del tiddler que lo define +class: La clase CSS que se aplica a un tiddler al renderizarlo (consulta [[Estilos personalizados por clase de usuario]]. También se utiliza para [[Modales]] code-body: La plantilla de vista mostrará el tiddler como código si se establece en ''yes'' color: Valor CSS del color de fondo asociado a un tiddler component: Nombre del componente responsable de un [[tiddler de alerta|AlertMechanism]] @@ -29,6 +30,7 @@ name: Nombre asociado con un complemento o extensión parent-plugin: Para un plugin, especifica de qué plugin es un subplugin plugin-priority: Valor numérico que indica la prioridad de un complemento o extensión plugin-type: Tipo de complemento o extensión +stability: El estado de desarrollo de un complemento: obsoleto, experimental, estable o heredado revision: Revisión del tiddler existente en el servidor released: Fecha de la edición de TiddlyWiki source: Dirección de la fuente asociada a un tiddler diff --git a/languages/es-ES/Help/commands.tid b/languages/es-ES/Help/commands.tid index 8a1fc4589..7fc563902 100644 --- a/languages/es-ES/Help/commands.tid +++ b/languages/es-ES/Help/commands.tid @@ -10,7 +10,7 @@ Ejecuta secuencialmente las instrucciones devueltas por un filtro Ejemplos ``` ---commands "[enlist{$:/build-commands-as-text}]" +--commands "[enlist:raw{$:/build-commands-as-text}]" ``` ``` diff --git a/languages/es-ES/Misc.multids b/languages/es-ES/Misc.multids index 6c0839027..949a169d4 100644 --- a/languages/es-ES/Misc.multids +++ b/languages/es-ES/Misc.multids @@ -30,7 +30,7 @@ Error/DeserializeOperator/UnknownDeserializer: Error de filtro: Deserializador d Error/Filter: Error de filtro Error/FilterSyntax: Error de sintaxis en la expresión de filtro Error/FilterRunPrefix: Error en Filtro: Prefijo desconocido para la ejecución del filtro -Error/IsFilterOperator: Error en Filtro: Operando desconocido para el operador de filtro 'is' +Error/IsFilterOperator: Error en Filtro: Parámetro desconocido para el operador de filtro 'is' Error/FormatFilterOperator: Error en Filtro: Sufijo desconocido para el operador de filtro 'format' Error/LoadingPluginLibrary: Error al cargar la biblioteca de complementos Error/NetworkErrorAlert: `<h2>''Error de Red''</h2>Parece que se perdió la conexión con el servidor. Esto puede indicar un problema con tu conexión de red. Intenta restaurar la conectividad de red antes de continuar.<br><br>''Cualquier cambio no guardado se sincronizará automáticamente cuando se restaure la conectividad''.` @@ -70,7 +70,7 @@ No: No OfficialPluginLibrary: Librería de complementos oficiales de ~TiddlyWiki OfficialPluginLibrary/Hint: Librería de complementos oficiales de ~TiddlyWiki en tiddlywiki.com<br> Plugins, temas y paquetes de idioma que mantiene el equipo de TiddlyWiki PageTemplate/Description: la disposición por defecto de ~TiddlyWiki -PageTemplate/Name: ~PageTemplate por defecto +PageTemplate/Name: Disposición Estándar PluginReloadWarning: Guarda {{$:/core/ui/Buttons/save-wiki}} y recarga {{$:/core/ui/Buttons/refresh}} para que los cambios surtan efecto. RecentChanges/DateFormat: DD MMM YYYY Shortcuts/Input/AdvancedSearch/Hint: Abre el panel ~AdvancedSearch desde el campo de búsqueda de la barra lateral diff --git a/languages/es-ES/Search.multids b/languages/es-ES/Search.multids index d1eb495d4..bc752f349 100644 --- a/languages/es-ES/Search.multids +++ b/languages/es-ES/Search.multids @@ -6,6 +6,8 @@ Filter/Hint: Búsqueda por medio de [[expresiones de filtrado|https://tiddlywiki Filter/Matches: //<small><<resultCount>> coincidencias</small>// Matches: //<small><<resultCount>> coincidencias </small>// Matches/All: Cualquier coincidencia +Matches/NoMatch: //Sin coincidencias// +Matches/NoResult: //No hay resultados de búsqueda// Matches/Title: En título Search: Búsqueda Search/TooShort: Texto de búsqueda demasiado corto diff --git a/languages/es-ES/Snippets/FunctionDefinition.tid b/languages/es-ES/Snippets/FunctionDefinition.tid new file mode 100644 index 000000000..022725082 --- /dev/null +++ b/languages/es-ES/Snippets/FunctionDefinition.tid @@ -0,0 +1,7 @@ +title: $:/language/Snippets/FunctionDefinition +tags: $:/tags/TextEditor/Snippet +caption: Definición Función + +\function f.name(param1,param2:"valor defecto") [<param1>!is[blank]else<param2>] + +<<f.name>> diff --git a/languages/es-ES/Snippets/ProcedureDefinition.tid b/languages/es-ES/Snippets/ProcedureDefinition.tid new file mode 100644 index 000000000..0e7b6dc4d --- /dev/null +++ b/languages/es-ES/Snippets/ProcedureDefinition.tid @@ -0,0 +1,7 @@ +title: $:/language/Snippets/ProcedureDefinition +tags: $:/tags/TextEditor/Snippet +caption: Definición Procedimiento + +\procedure procName(param1:"valor defecto",param2) +Tu texto se pone aquí. +\end diff --git a/languages/es-ES/Types/image_svg_xml.tid b/languages/es-ES/Types/image_svg_xml.tid index ce88de09d..885aa0fbb 100644 --- a/languages/es-ES/Types/image_svg_xml.tid +++ b/languages/es-ES/Types/image_svg_xml.tid @@ -1,5 +1,5 @@ title: $:/language/Docs/Types/image/svg+xml -description: Imagen .SVG +description: Imagen SVG name: image/svg+xml group: Imagen group-sort: 1 diff --git a/languages/es-ES/Types/text_vnd.tiddlywiki_multiple.tid b/languages/es-ES/Types/text_vnd.tiddlywiki_multiple.tid new file mode 100644 index 000000000..9a16c0918 --- /dev/null +++ b/languages/es-ES/Types/text_vnd.tiddlywiki_multiple.tid @@ -0,0 +1,5 @@ +title: $:/language/Docs/Types/text/vnd.tiddlywiki-multiple +description: Tiddler compuesto +name: text/vnd.tiddlywiki-multiple +group: Developer +group-sort: 2 diff --git a/languages/es-ES/plugin.info b/languages/es-ES/plugin.info index 7b982c127..f1e6320cc 100644 --- a/languages/es-ES/plugin.info +++ b/languages/es-ES/plugin.info @@ -4,5 +4,5 @@ "plugin-type": "language", "description": "Castellano. (España)", "author": "Pau DeLuca,Joe Bordes", - "core-version": ">=5.1.23" + "core-version": ">=5.3" } From c82761a60029f5b26464f6ee9c14272d19e5d4bf Mon Sep 17 00:00:00 2001 From: Leilei332 <LeiYiXia29@outlook.com> Date: Wed, 2 Oct 2024 20:06:40 +0800 Subject: [PATCH 100/248] Add tc-table-wrapper class to fix overflow (#8652) * Add tc-table-wrapper class to fix overflow * Apply class in tag manager body --- core/ui/TagManager.tid | 2 + .../tiddlers/system/systemtag-template.tid | 8 +- .../tiddlers/wikitext/Utility Classes.tid | 1 + plugins/tiddlywiki/tour/settings.tid | 118 +++++++++--------- themes/tiddlywiki/vanilla/base.tid | 6 + 5 files changed, 77 insertions(+), 58 deletions(-) diff --git a/core/ui/TagManager.tid b/core/ui/TagManager.tid index e554d66cc..75daf840f 100644 --- a/core/ui/TagManager.tid +++ b/core/ui/TagManager.tid @@ -62,6 +62,7 @@ color: #bbb \end \whitespace trim +<div class="tc-table-wrapper"> <table class="tc-tag-manager-table"> <tbody> <tr> @@ -116,3 +117,4 @@ color: #bbb </tr> </tbody> </table> +</div> \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/system/systemtag-template.tid b/editions/tw5.com/tiddlers/system/systemtag-template.tid index f2d3eee69..b4e2d80c3 100644 --- a/editions/tw5.com/tiddlers/system/systemtag-template.tid +++ b/editions/tw5.com/tiddlers/system/systemtag-template.tid @@ -11,6 +11,7 @@ title: $:/editions/tw5.com/systemtag-template The following tiddlers are tagged with <<tag $(thisTag)$ >> +<div class="tc-table-wrapper"> <table> <tr><th></th><th>caption</th></tr> <$list filter='[all[tiddlers+shadows]tag<thisTag>sort[]]'> @@ -18,4 +19,9 @@ The following tiddlers are tagged with <<tag $(thisTag)$ >> <td><$link/></td> <td><$transclude field="caption"><$transclude field="description"><$view field="title"/></$transclude></$transclude></td> </tr> -</$list></table></$list></$let></$list> +</$list> +</table> +</div> +</$list> +</$let> +</$list> diff --git a/editions/tw5.com/tiddlers/wikitext/Utility Classes.tid b/editions/tw5.com/tiddlers/wikitext/Utility Classes.tid index b61246960..c0cd0a111 100644 --- a/editions/tw5.com/tiddlers/wikitext/Utility Classes.tid +++ b/editions/tw5.com/tiddlers/wikitext/Utility Classes.tid @@ -18,3 +18,4 @@ type: text/vnd.tiddlywiki |`tc-table-no-border` |Removes the borders of a table | |`tc-first-col-min-width` |The first column of a table will take up minimal possible width. It adapts to the content | +|`tc-table-wrapper` |<<.from-version "5.3.6">> A class to be applied to a `div` element outside the table to prevent table from overflowing | diff --git a/plugins/tiddlywiki/tour/settings.tid b/plugins/tiddlywiki/tour/settings.tid index 93112f39b..720d01017 100644 --- a/plugins/tiddlywiki/tour/settings.tid +++ b/plugins/tiddlywiki/tour/settings.tid @@ -51,48 +51,50 @@ Select a tour: currentTour={{{ [<stateCurrentTour>get[text]] :else[<defaultTour>] }}} currentTourTag={{{ [<currentTour>get[tour-tag]] }}} > - <table class="tc-tour-settings-tour-details"> - <tbody> - <tr> - <th> - Tour title - </th> - <td> - <$link to=<<currentTour>>><$text text=<<currentTour>>/></$link> - </td> - </tr> - <tr> - <th> - Tour description - </th> - <td> - <div class="tc-tour-settings-tour-details-description"> - <$transclude $tiddler=<<currentTour>>> - (No description available) - </$transclude> - </div> - </td> - </tr> - <tr> - <th> - Tour logo - </th> - <td> - <div class="tc-tour-settings-tour-details-logo"> - <$image source={{{ [<currentTour>get[logo]] }}}/> - </div> - </td> - </tr> - <tr> - <th> - Tour step tag - </th> - <td> - <$transclude $variable="tag" tag=<<currentTourTag>>/> - </td> - </tr> - </tbody> - </table> + <div class="tc-table-wrapper"> + <table class="tc-tour-settings-tour-details"> + <tbody> + <tr> + <th> + Tour title + </th> + <td> + <$link to=<<currentTour>>><$text text=<<currentTour>>/></$link> + </td> + </tr> + <tr> + <th> + Tour description + </th> + <td> + <div class="tc-tour-settings-tour-details-description"> + <$transclude $tiddler=<<currentTour>>> + (No description available) + </$transclude> + </div> + </td> + </tr> + <tr> + <th> + Tour logo + </th> + <td> + <div class="tc-tour-settings-tour-details-logo"> + <$image source={{{ [<currentTour>get[logo]] }}}/> + </div> + </td> + </tr> + <tr> + <th> + Tour step tag + </th> + <td> + <$transclude $variable="tag" tag=<<currentTourTag>>/> + </td> + </tr> + </tbody> + </table> + </div> <$list filter="[<currentTour>has[settings]]" variable="ignore"> <p> Custom tour settings: @@ -129,21 +131,23 @@ Select a tour: </$button> </div> <$reveal state=<<collapseState>> text="show" type="match" default="hide" animate="yes"> - <table class="tc-tour-settings-tour-step-details"> - <tbody> - <<display-tour-step-field-text "title" "Title">> - <<display-tour-step-field-text "caption" "Caption">> - <<display-tour-step-field-text "step-success-filter" "step-success-filter">> - <<display-tour-step-field-text "step-success-filter-var" "step-success-filter Variable">> - <<display-tour-step-field-text "display-mode" "Display Mode">> - <<display-tour-step-field-text "enter-actions" "Enter Actions">> - <<display-tour-step-field-text "hint-text" "Hint text">> - <<display-tour-step-field-text "hint-selector" "Hint selector">> - <<display-tour-step-field-text "hint-selector-fallback-1" "Hint selector Fallback 1">> - <<display-tour-step-field-text "hint-selector-fallback-2" "Hint selector Fallback 2">> - <<display-tour-step-field-text "condition" "Condition">> - </tbody> - </table> + <div class="tc-table-wrapper"> + <table class="tc-tour-settings-tour-step-details"> + <tbody> + <<display-tour-step-field-text "title" "Title">> + <<display-tour-step-field-text "caption" "Caption">> + <<display-tour-step-field-text "step-success-filter" "step-success-filter">> + <<display-tour-step-field-text "step-success-filter-var" "step-success-filter Variable">> + <<display-tour-step-field-text "display-mode" "Display Mode">> + <<display-tour-step-field-text "enter-actions" "Enter Actions">> + <<display-tour-step-field-text "hint-text" "Hint text">> + <<display-tour-step-field-text "hint-selector" "Hint selector">> + <<display-tour-step-field-text "hint-selector-fallback-1" "Hint selector Fallback 1">> + <<display-tour-step-field-text "hint-selector-fallback-2" "Hint selector Fallback 2">> + <<display-tour-step-field-text "condition" "Condition">> + </tbody> + </table> + </div> <div class="tc-tour-settings-tour-step-body"> <$transclude $tiddler=<<currentStep>> $mode="block"/> </div> diff --git a/themes/tiddlywiki/vanilla/base.tid b/themes/tiddlywiki/vanilla/base.tid index 112233016..c13b69f9b 100644 --- a/themes/tiddlywiki/vanilla/base.tid +++ b/themes/tiddlywiki/vanilla/base.tid @@ -2807,6 +2807,12 @@ a.tc-tiddlylink.tc-plugin-info:hover > .tc-plugin-info-chunk .tc-plugin-info-sta width: 100%; } +/* A wrapper to fix table overflow */ + +.tc-table-wrapper { + overflow-x: auto; +} + /* ** Chooser */ From e591dfd5903a426bad68aa35959a73387b36bf9b Mon Sep 17 00:00:00 2001 From: Saq Imtiaz <saq.imtiaz@gmail.com> Date: Wed, 2 Oct 2024 14:15:53 +0200 Subject: [PATCH 101/248] Update the editor file import UI to support markdown tiddlers (#8486) * chore: update editor file import to use procedures and substitute operator * feat: refactor editor file-import UI to reuse filter from $:/config/Editor/EnableImportFilter * feat: support for markdown in editor file import UI * feat: improve markdown type detection and enable markdown image imports by default * fix: uri encode tiddler titles for markdown * escape characters instead of URI encoding * fix: tweak regexp to simplify code and document escaping rules --- core/ui/EditorToolbar/file-import.tid | 34 ++++++++++++------- core/wiki/config/EditorEnableImportFilter.tid | 2 +- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/core/ui/EditorToolbar/file-import.tid b/core/ui/EditorToolbar/file-import.tid index 20cff547d..0fd5e08a5 100644 --- a/core/ui/EditorToolbar/file-import.tid +++ b/core/ui/EditorToolbar/file-import.tid @@ -1,20 +1,30 @@ title: $:/core/ui/EditorToolbar/file-import tags: $:/tags/EditorTools -condition: [<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]] +condition: [<targetTiddler>filter{$:/config/Editor/EnableImportFilter}] -\define lingo-base() $:/language/Import/ +\procedure lingo-base() $:/language/Import/ -\define closePopupActions() +\procedure closePopupActions() <$action-deletetiddler $filter="[title<importState>] [title<importTitle>]"/> -\end +\end closePopupActions -\define replacement-text-image() [img[$title$]] +\procedure tw5-ImageTemplate() [img[$(currentTiddler)$]] +\procedure tw5-FileTemplate() [[$(currentTiddler)$]] -\define replacement-text-file() [[$title$]] +<!-- The following characters must be escaped in markdown: <>()\ --> +\function escape.title() [search-replace:g:regexp[\(|\)|<|>|\\],[\$&]] +\procedure markdown-ImageTemplate() ![](<#${ [<currentTiddler>escape.title[]] }$>) +\procedure markdown-FileTemplate() [](<#${ [<currentTiddler>escape.title[]] }$>) -\define postImportActions() +\function is.markdown.tiddler() [all[]type[text/x-markdown]] [all[]type[text/markdown]] +\function is.image() [get[type]prefix[image]] +\function get.markdown.link() [is.image[]then<markdown-ImageTemplate>else<markdown-FileTemplate>] +\function get.tw5.link() [is.image[]then<tw5-ImageTemplate>else<tw5-FileTemplate>] +\function get.link.template() [<storyTiddler>is.markdown.tiddler[]then<get.markdown.link>else<get.tw5.link>] + +\procedure postImportActions() \whitespace trim -<$list filter="[<importTitle>links[]] :reduce[get[type]prefix[image]then<replacement-text-image>else<replacement-text-file>search-replace[$title$],<currentTiddler>addprefix<accumulator>]" variable="imageTitle"> +<$list filter="[<importTitle>links[]] :reduce[get.link.template[]substitute[]addprefix<accumulator>]" variable="imageTitle"> <$action-sendmessage $message="tm-edit-text-operation" $param="insert-text" @@ -22,14 +32,14 @@ condition: [<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki] /> </$list> <<closePopupActions>> -\end +\end postImportActions -\define buttons() +\procedure buttons() \whitespace trim <$button class="tc-btn-invisible" actions=<<closePopupActions>> ><<lingo Listing/Cancel/Caption>></$button> <$button class="tc-btn-invisible" message="tm-perform-import" param=<<importTitle>> actions=<<postImportActions>> ><<lingo Listing/Import/Caption>></$button> -\end +\end buttons \whitespace trim <$reveal type="popup" state=<<importState>> tag="div" class="tc-editor-importpopup"> @@ -42,4 +52,4 @@ condition: [<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki] </$tiddler> </$list> </div> -</$reveal> +</$reveal> \ No newline at end of file diff --git a/core/wiki/config/EditorEnableImportFilter.tid b/core/wiki/config/EditorEnableImportFilter.tid index 55d068e12..805ad72f0 100644 --- a/core/wiki/config/EditorEnableImportFilter.tid +++ b/core/wiki/config/EditorEnableImportFilter.tid @@ -1,4 +1,4 @@ title: $:/config/Editor/EnableImportFilter type: text/vnd.tiddlywiki -[all[current]type[text/vnd.tiddlywiki]] [all[current]!has[type]] \ No newline at end of file +[all[current]type[text/vnd.tiddlywiki]] [all[current]!has[type]] [all[current]type[text/markdown]] [all[current]type[text/x-markdown]] \ No newline at end of file From f4f1ae6b9bc2391a769172e23749e5b79661bb3d Mon Sep 17 00:00:00 2001 From: Mario Pietsch <pmariojo@gmail.com> Date: Thu, 3 Oct 2024 13:34:39 +0200 Subject: [PATCH 102/248] Fix alignment in tiddler subtitle (#8659) --- core/ui/ViewTemplate/subtitle/default.tid | 2 +- core/ui/ViewTemplate/subtitle/modifier.tid | 2 +- .../tiddler-subtitle/subtitle-modified.tid | 23 ++++++++++++++++++ .../subtitle-modifier-modified.tid | 24 +++++++++++++++++++ 4 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 editions/test/tiddlers/tests/data/tiddler-subtitle/subtitle-modified.tid create mode 100644 editions/test/tiddlers/tests/data/tiddler-subtitle/subtitle-modifier-modified.tid diff --git a/core/ui/ViewTemplate/subtitle/default.tid b/core/ui/ViewTemplate/subtitle/default.tid index 99042c95e..5c55712fa 100644 --- a/core/ui/ViewTemplate/subtitle/default.tid +++ b/core/ui/ViewTemplate/subtitle/default.tid @@ -4,7 +4,7 @@ title: $:/core/ui/ViewTemplate/subtitle/default <$reveal type="nomatch" stateTitle=<<folded-state>> text="hide" tag="div" retain="yes" animate="yes"> <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> +<$transclude tiddler=<<subtitleTiddler>> mode="inline"/> </$list> </div> </$reveal> diff --git a/core/ui/ViewTemplate/subtitle/modifier.tid b/core/ui/ViewTemplate/subtitle/modifier.tid index 8437ada9b..e4062380d 100644 --- a/core/ui/ViewTemplate/subtitle/modifier.tid +++ b/core/ui/ViewTemplate/subtitle/modifier.tid @@ -1,4 +1,4 @@ title: $:/core/ui/ViewTemplate/subtitle/modifier tags: $:/tags/ViewTemplate/Subtitle -<$link to={{!!modifier}}/> \ No newline at end of file +<%if [{!!modifier}!is[blank]] %><$link to={{!!modifier}}/><%endif%> \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/tiddler-subtitle/subtitle-modified.tid b/editions/test/tiddlers/tests/data/tiddler-subtitle/subtitle-modified.tid new file mode 100644 index 000000000..0191aaccf --- /dev/null +++ b/editions/test/tiddlers/tests/data/tiddler-subtitle/subtitle-modified.tid @@ -0,0 +1,23 @@ +title: Subtitle/modified +description: Tiddler ViewTemplate Subtitle modified only +type: text/vnd.tiddlywiki-multiple +import: [all[shadows+tiddlers]tag[$:/tags/ViewTemplate/Subtitle]!has[draft.of]] $:/core/ui/ViewTemplate/subtitle/default +tags: $:/tags/wiki-test-spec + +title: $:/language/Tiddler/DateFormat + +[UTC]DDth MMM YYYY at hh12:0mmam ++ +title: Output + +\whitespace trim +{{test||$:/core/ui/ViewTemplate/subtitle/default}} ++ +title: test +modified: 20241003111606000 + +text ++ +title: ExpectedResult + +<p><div class=" tc-reveal"><div class="tc-subtitle tc-clearfix">3rd October 2024 at 11:16am</div></div></p> \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/tiddler-subtitle/subtitle-modifier-modified.tid b/editions/test/tiddlers/tests/data/tiddler-subtitle/subtitle-modifier-modified.tid new file mode 100644 index 000000000..c060faeae --- /dev/null +++ b/editions/test/tiddlers/tests/data/tiddler-subtitle/subtitle-modifier-modified.tid @@ -0,0 +1,24 @@ +title: Subtitle/modifier-modified +description: Tiddler ViewTemplate Subtitle. Show modifier and modified in UTC format +type: text/vnd.tiddlywiki-multiple +import: [all[shadows+tiddlers]tag[$:/tags/ViewTemplate/Subtitle]!has[draft.of]] $:/core/ui/ViewTemplate/subtitle/default +tags: $:/tags/wiki-test-spec + +title: $:/language/Tiddler/DateFormat + +[UTC]DDth MMM YYYY at hh12:0mmam ++ +title: Output + +\whitespace trim +{{test||$:/core/ui/ViewTemplate/subtitle/default}} ++ +title: test +modifier: test-user +modified: 20241003111606000 + +text ++ +title: ExpectedResult + +<p><div class=" tc-reveal"><div class="tc-subtitle tc-clearfix"><a class="tc-tiddlylink tc-tiddlylink-missing" href="#test-user">test-user</a>3rd October 2024 at 11:16am</div></div></p> \ No newline at end of file From 2327dd043f982f3df31c9ddb30ffabe0af8e6112 Mon Sep 17 00:00:00 2001 From: Jeremy Ruston <jeremy@jermolene.com> Date: Thu, 3 Oct 2024 13:19:23 +0100 Subject: [PATCH 103/248] Revert "Fix alignment in tiddler subtitle (#8659)" This reverts commit f4f1ae6b9bc2391a769172e23749e5b79661bb3d. --- core/ui/ViewTemplate/subtitle/default.tid | 2 +- core/ui/ViewTemplate/subtitle/modifier.tid | 2 +- .../tiddler-subtitle/subtitle-modified.tid | 23 ------------------ .../subtitle-modifier-modified.tid | 24 ------------------- 4 files changed, 2 insertions(+), 49 deletions(-) delete mode 100644 editions/test/tiddlers/tests/data/tiddler-subtitle/subtitle-modified.tid delete mode 100644 editions/test/tiddlers/tests/data/tiddler-subtitle/subtitle-modifier-modified.tid diff --git a/core/ui/ViewTemplate/subtitle/default.tid b/core/ui/ViewTemplate/subtitle/default.tid index 5c55712fa..99042c95e 100644 --- a/core/ui/ViewTemplate/subtitle/default.tid +++ b/core/ui/ViewTemplate/subtitle/default.tid @@ -4,7 +4,7 @@ title: $:/core/ui/ViewTemplate/subtitle/default <$reveal type="nomatch" stateTitle=<<folded-state>> text="hide" tag="div" retain="yes" animate="yes"> <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"/> +<$transclude tiddler=<<subtitleTiddler>> mode="inline"/><$list-join> </$list-join> </$list> </div> </$reveal> diff --git a/core/ui/ViewTemplate/subtitle/modifier.tid b/core/ui/ViewTemplate/subtitle/modifier.tid index e4062380d..8437ada9b 100644 --- a/core/ui/ViewTemplate/subtitle/modifier.tid +++ b/core/ui/ViewTemplate/subtitle/modifier.tid @@ -1,4 +1,4 @@ title: $:/core/ui/ViewTemplate/subtitle/modifier tags: $:/tags/ViewTemplate/Subtitle -<%if [{!!modifier}!is[blank]] %><$link to={{!!modifier}}/><%endif%> \ No newline at end of file +<$link to={{!!modifier}}/> \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/tiddler-subtitle/subtitle-modified.tid b/editions/test/tiddlers/tests/data/tiddler-subtitle/subtitle-modified.tid deleted file mode 100644 index 0191aaccf..000000000 --- a/editions/test/tiddlers/tests/data/tiddler-subtitle/subtitle-modified.tid +++ /dev/null @@ -1,23 +0,0 @@ -title: Subtitle/modified -description: Tiddler ViewTemplate Subtitle modified only -type: text/vnd.tiddlywiki-multiple -import: [all[shadows+tiddlers]tag[$:/tags/ViewTemplate/Subtitle]!has[draft.of]] $:/core/ui/ViewTemplate/subtitle/default -tags: $:/tags/wiki-test-spec - -title: $:/language/Tiddler/DateFormat - -[UTC]DDth MMM YYYY at hh12:0mmam -+ -title: Output - -\whitespace trim -{{test||$:/core/ui/ViewTemplate/subtitle/default}} -+ -title: test -modified: 20241003111606000 - -text -+ -title: ExpectedResult - -<p><div class=" tc-reveal"><div class="tc-subtitle tc-clearfix">3rd October 2024 at 11:16am</div></div></p> \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/tiddler-subtitle/subtitle-modifier-modified.tid b/editions/test/tiddlers/tests/data/tiddler-subtitle/subtitle-modifier-modified.tid deleted file mode 100644 index c060faeae..000000000 --- a/editions/test/tiddlers/tests/data/tiddler-subtitle/subtitle-modifier-modified.tid +++ /dev/null @@ -1,24 +0,0 @@ -title: Subtitle/modifier-modified -description: Tiddler ViewTemplate Subtitle. Show modifier and modified in UTC format -type: text/vnd.tiddlywiki-multiple -import: [all[shadows+tiddlers]tag[$:/tags/ViewTemplate/Subtitle]!has[draft.of]] $:/core/ui/ViewTemplate/subtitle/default -tags: $:/tags/wiki-test-spec - -title: $:/language/Tiddler/DateFormat - -[UTC]DDth MMM YYYY at hh12:0mmam -+ -title: Output - -\whitespace trim -{{test||$:/core/ui/ViewTemplate/subtitle/default}} -+ -title: test -modifier: test-user -modified: 20241003111606000 - -text -+ -title: ExpectedResult - -<p><div class=" tc-reveal"><div class="tc-subtitle tc-clearfix"><a class="tc-tiddlylink tc-tiddlylink-missing" href="#test-user">test-user</a>3rd October 2024 at 11:16am</div></div></p> \ No newline at end of file From ac8fa2cf00e87c5218af615562c93b782572b3d7 Mon Sep 17 00:00:00 2001 From: Jeremy Ruston <jeremy@jermolene.com> Date: Thu, 3 Oct 2024 16:41:19 +0100 Subject: [PATCH 104/248] Remove obsolete mobiledragdrop plugin --- editions/tw5.com-server/tiddlywiki.info | 1 - 1 file changed, 1 deletion(-) diff --git a/editions/tw5.com-server/tiddlywiki.info b/editions/tw5.com-server/tiddlywiki.info index 7f0ebb215..cc460be7e 100644 --- a/editions/tw5.com-server/tiddlywiki.info +++ b/editions/tw5.com-server/tiddlywiki.info @@ -4,7 +4,6 @@ "tiddlywiki/tiddlyweb", "tiddlywiki/filesystem", "tiddlywiki/highlight", - "tiddlywiki/mobiledragdrop", "tiddlywiki/internals" ], "themes": [ From 20611cc875363f4ed3051fb0b295c2a214b82567 Mon Sep 17 00:00:00 2001 From: Jeremy Ruston <jeremy@jermolene.com> Date: Thu, 3 Oct 2024 21:16:15 +0100 Subject: [PATCH 105/248] Force a build --- editions/tw5.com/tiddlers/hellothere/HelloThere.tid | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/editions/tw5.com/tiddlers/hellothere/HelloThere.tid b/editions/tw5.com/tiddlers/hellothere/HelloThere.tid index 8ceacfe24..046241812 100644 --- a/editions/tw5.com/tiddlers/hellothere/HelloThere.tid +++ b/editions/tw5.com/tiddlers/hellothere/HelloThere.tid @@ -70,4 +70,4 @@ Use it to keep your [[to-do list|TaskManagementExample]], to plan an [[essay or <$list filter="[tag[Testimonial]]"> <$macrocall $name="flex-card" class="tc-card-quote" captionField="caption" descriptionField="text"/> </$list> -</div> \ No newline at end of file +</div> From c0415d9c9336021393857cd720f3f2288e1fcae6 Mon Sep 17 00:00:00 2001 From: Mohammad Rahmani <830394+kookma@users.noreply.github.com> Date: Sun, 6 Oct 2024 20:13:18 +0330 Subject: [PATCH 106/248] Make All Hex Color Code Consistent (#8665) --- core/palettes/Vanilla.tid | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/core/palettes/Vanilla.tid b/core/palettes/Vanilla.tid index 76307acee..d981a485e 100644 --- a/core/palettes/Vanilla.tid +++ b/core/palettes/Vanilla.tid @@ -32,7 +32,7 @@ dragger-background: <<colour foreground>> dragger-foreground: <<colour background>> dropdown-background: <<colour background>> dropdown-border: <<colour muted-foreground>> -dropdown-tab-background-selected: #fff +dropdown-tab-background-selected: #ffffff dropdown-tab-background: #ececec dropzone-background: rgba(0,200,0,0.7) external-link-background-hover: inherit @@ -54,7 +54,7 @@ modal-border: #999999 modal-footer-background: #f5f5f5 modal-footer-border: #dddddd modal-header-border: #eeeeee -muted-foreground: #bbb +muted-foreground: #bbbbbb network-activity-foreground: #448844 notification-background: #ffffdd notification-border: #999999 @@ -98,7 +98,7 @@ tab-foreground: #666666 table-border: #dddddd table-footer-background: #a8a8a8 table-header-background: #f0f0f0 -tag-background: #ec6 +tag-background: #eecc66 tag-foreground: #ffffff testcase-accent-level-1: #c1eaff testcase-accent-level-2: #E3B740 @@ -132,11 +132,11 @@ toolbar-done-button: untagged-background: #999999 very-muted-foreground: #888888 wikilist-background: #e5e5e5 -wikilist-item: #fff -wikilist-info: #000 -wikilist-title: #666 +wikilist-item: #ffffff +wikilist-info: #000000 +wikilist-title: #666666 wikilist-title-svg: <<colour wikilist-title>> -wikilist-url: #aaa +wikilist-url: #aaaaaa wikilist-button-open: #4fb82b wikilist-button-open-hover: green wikilist-button-reveal: #5778d8 @@ -144,7 +144,7 @@ wikilist-button-reveal-hover: blue wikilist-button-remove: #d85778 wikilist-button-remove-hover: red wikilist-toolbar-background: #d3d3d3 -wikilist-toolbar-foreground: #888 +wikilist-toolbar-foreground: #888888 wikilist-droplink-dragover: rgba(255,192,192,0.5) wikilist-button-background: #acacac -wikilist-button-foreground: #000 +wikilist-button-foreground: #000000 From 8a47eb2d03f10f0a990a76e3b459e832c19895c7 Mon Sep 17 00:00:00 2001 From: Leilei332 <LeiYiXia29@outlook.com> Date: Mon, 7 Oct 2024 18:22:06 +0800 Subject: [PATCH 107/248] [DOCS] Update commands in "Generating Static Sites with TiddlyWiki" to use render command (#8666) * Update commands in "Generating Static Sites with TiddlyWiki" to use render command & add deprecated tag to some command * Remove timestamp in deprecated commands --- .../tiddlers/commands/RenderTiddlerCommand.tid | 5 +++-- .../tiddlers/commands/RenderTiddlersCommand.tid | 5 +++-- .../tiddlers/commands/SaveTiddlerCommand.tid | 8 ++++---- .../tiddlers/commands/SaveTiddlersCommand.tid | 8 ++++---- .../Generating Static Sites with TiddlyWiki.tid | 14 +++++++------- 5 files changed, 21 insertions(+), 19 deletions(-) diff --git a/editions/tw5.com/tiddlers/commands/RenderTiddlerCommand.tid b/editions/tw5.com/tiddlers/commands/RenderTiddlerCommand.tid index ede970536..404a80b6a 100644 --- a/editions/tw5.com/tiddlers/commands/RenderTiddlerCommand.tid +++ b/editions/tw5.com/tiddlers/commands/RenderTiddlerCommand.tid @@ -1,6 +1,7 @@ -title: RenderTiddlerCommand -tags: Commands caption: rendertiddler +tags: Commands $:/deprecated +title: RenderTiddlerCommand +type: text/vnd.tiddlywiki <<.deprecated-since "5.1.15" "RenderCommand">>. diff --git a/editions/tw5.com/tiddlers/commands/RenderTiddlersCommand.tid b/editions/tw5.com/tiddlers/commands/RenderTiddlersCommand.tid index 6d4282fb2..88ad91eca 100644 --- a/editions/tw5.com/tiddlers/commands/RenderTiddlersCommand.tid +++ b/editions/tw5.com/tiddlers/commands/RenderTiddlersCommand.tid @@ -1,6 +1,7 @@ -title: RenderTiddlersCommand -tags: Commands caption: rendertiddlers +tags: Commands $:/deprecated +title: RenderTiddlersCommand +type: text/vnd.tiddlywiki <<.deprecated-since "5.1.15" "RenderCommand">>. diff --git a/editions/tw5.com/tiddlers/commands/SaveTiddlerCommand.tid b/editions/tw5.com/tiddlers/commands/SaveTiddlerCommand.tid index f51799163..1b9bacddb 100644 --- a/editions/tw5.com/tiddlers/commands/SaveTiddlerCommand.tid +++ b/editions/tw5.com/tiddlers/commands/SaveTiddlerCommand.tid @@ -1,8 +1,8 @@ -title: SaveTiddlerCommand -tags: Commands -created: 20131218121606089 -modified: 20131218121606089 caption: savetiddler +created: 20131218121606089 +tags: Commands $:/deprecated +title: SaveTiddlerCommand +type: text/vnd.tiddlywiki <<.deprecated-since "5.1.15" "SaveCommand">>. diff --git a/editions/tw5.com/tiddlers/commands/SaveTiddlersCommand.tid b/editions/tw5.com/tiddlers/commands/SaveTiddlersCommand.tid index c167cd4a3..4b41dee52 100644 --- a/editions/tw5.com/tiddlers/commands/SaveTiddlersCommand.tid +++ b/editions/tw5.com/tiddlers/commands/SaveTiddlersCommand.tid @@ -1,8 +1,8 @@ -title: SaveTiddlersCommand -tags: Commands -created: 20140609121606089 -modified: 20140609121606089 caption: savetiddlers +created: 20140609121606089 +tags: Commands $:/deprecated +title: SaveTiddlersCommand +type: text/vnd.tiddlywiki <<.deprecated-since "5.1.15" "SaveCommand">>. diff --git a/editions/tw5.com/tiddlers/howtos/Generating Static Sites with TiddlyWiki.tid b/editions/tw5.com/tiddlers/howtos/Generating Static Sites with TiddlyWiki.tid index ce1061431..104fa7e49 100644 --- a/editions/tw5.com/tiddlers/howtos/Generating Static Sites with TiddlyWiki.tid +++ b/editions/tw5.com/tiddlers/howtos/Generating Static Sites with TiddlyWiki.tid @@ -1,5 +1,5 @@ created: 20130828190200000 -modified: 20200421003440463 +modified: 20241007003103647 tags: [[TiddlyWiki on Node.js]] title: Generating Static Sites with TiddlyWiki type: text/vnd.tiddlywiki @@ -16,13 +16,13 @@ You can explore a static representation of the main TiddlyWiki site at https://t The following commands are used to generate the sample static version of the TiddlyWiki5 site: -``` -tiddlywiki wikipath --rendertiddlers '[!is[system]]' $:/core/templates/static.tiddler.html static text/plain -tiddlywiki wikipath --rendertiddler $:/core/templates/static.template.html static.html text/plain -tiddlywiki wikipath --rendertiddler $:/core/templates/static.template.css static/static.css text/plain +```sh +tiddlywiki wikipath --render '[!is[system]]' '[encodeuricomponent[]addprefix[static/]]' text/plain $:/core/templates/static.tiddler.html +tiddlywiki wikipath --render $:/core/templates/static.template.html static.html text/plain +tiddlywiki wikipath --render $:/core/templates/static.template.css static/static.css text/plain ``` -The first RenderTiddlersCommand generates the HTML representations of individual tiddlers, the second RenderTiddlerCommand saves the static version of the DefaultTiddlers, and the final RenderTiddlerCommand saves the stylesheet. (All the files are placed in the `output` folder of the wiki folder). +The first RenderCommand generates the HTML representations of individual tiddlers, `[encodeuricomponent[]addprefix[static/]]` applies URI encoding to each title, and then adds the prefix `static/`. The second RenderCommand saves the static version of the DefaultTiddlers, and the final RenderCommand saves the stylesheet. (All the files are placed in the `output` folder of the wiki folder). ! Wiki Snapshot with Internal Links @@ -33,5 +33,5 @@ For example: https://tiddlywiki.com/alltiddlers.html The example is built by the following commands: ``` ---rendertiddler $:/core/templates/alltiddlers.template.html alltiddlers.html text/plain +--render $:/core/templates/alltiddlers.template.html alltiddlers.html text/plain ``` From 1736d9dd4d0eaa5dab3edbda1de78316ce231499 Mon Sep 17 00:00:00 2001 From: Mario Pietsch <pmariojo@gmail.com> Date: Tue, 8 Oct 2024 12:48:46 +0200 Subject: [PATCH 108/248] Fix misaligned subtitle (#8672) --- core/ui/ViewTemplate/subtitle/default.tid | 2 +- core/ui/ViewTemplate/subtitle/modifier.tid | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/ui/ViewTemplate/subtitle/default.tid b/core/ui/ViewTemplate/subtitle/default.tid index 99042c95e..5c55712fa 100644 --- a/core/ui/ViewTemplate/subtitle/default.tid +++ b/core/ui/ViewTemplate/subtitle/default.tid @@ -4,7 +4,7 @@ title: $:/core/ui/ViewTemplate/subtitle/default <$reveal type="nomatch" stateTitle=<<folded-state>> text="hide" tag="div" retain="yes" animate="yes"> <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> +<$transclude tiddler=<<subtitleTiddler>> mode="inline"/> </$list> </div> </$reveal> diff --git a/core/ui/ViewTemplate/subtitle/modifier.tid b/core/ui/ViewTemplate/subtitle/modifier.tid index 8437ada9b..e4062380d 100644 --- a/core/ui/ViewTemplate/subtitle/modifier.tid +++ b/core/ui/ViewTemplate/subtitle/modifier.tid @@ -1,4 +1,4 @@ title: $:/core/ui/ViewTemplate/subtitle/modifier tags: $:/tags/ViewTemplate/Subtitle -<$link to={{!!modifier}}/> \ No newline at end of file +<%if [{!!modifier}!is[blank]] %><$link to={{!!modifier}}/><%endif%> \ No newline at end of file From 0451a8aa8d433539a478b2113684e2511eaa1d63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yohan=20Yukiya=20Sese-Cuneta=E3=86=8D=EC=82=AC=EC=9A=94?= =?UTF-8?q?=ED=95=9C=E3=83=BB=E8=AC=9D=E9=9B=AA=E7=9F=A2?= <techmagus@im.youronly.one> Date: Tue, 8 Oct 2024 22:05:13 +0800 Subject: [PATCH 109/248] CLA-individual signed: JC John Sese Cuneta, @techmagus, 2024/10/07 (#8670) Individually signed the CLA. JC John Sese Cuneta, @techmagus, 2024/10/07 --- licenses/cla-individual.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/licenses/cla-individual.md b/licenses/cla-individual.md index be6bf619d..de28728dc 100644 --- a/licenses/cla-individual.md +++ b/licenses/cla-individual.md @@ -591,3 +591,5 @@ Val Packett, @valpackett, 2024/07/26 @JDIGIO0213, 2024/08/29 @IchijikuIchigo, 2024/09/29 + +JC John Sese Cuneta, @techmagus, 2024/10/07 From 41b9f625b354587473b6ac27c40d0124d4228f5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yohan=20Yukiya=20Sese-Cuneta=E3=86=8D=EC=82=AC=EC=9A=94?= =?UTF-8?q?=ED=95=9C=E3=83=BB=E8=AC=9D=E9=9B=AA=E7=9F=A2?= <techmagus@im.youronly.one> Date: Tue, 8 Oct 2024 22:05:49 +0800 Subject: [PATCH 110/248] Language plugin: add en-PH (English (PH)) as a new translation (#8669) * initial en-PH * English (PH) [en-ph] translation v1 * fix: moved en-PH to the correct file in /editions/full/tiddlywiki.info * deleted since changes were mainly on styles, like em or en dash instead of regular dash * upd: 'dependents' not needed in this particular case * deleted 'empty' files * upd: removed modifications which were mainly related on style (like em and en dashes); upd: CamelCase instead of separating camelCase and PascalCase (see https://github.com/TiddlyWiki/TiddlyWiki5/pull/8669#pullrequestreview-2352481385 ) * upd: Simplified Confirm* strings; upd: natural DateFormat (instead of formal format) * upd: 'want' instead of 'wish' * upd: natural DateFormat (instead of ISO format) * minor: used 'the' instead of 'a' or 'an' as reading of '.html' depends on the reader (ie. a 'dot html' extension vs an 'html' extension) --- editions/full/tiddlywiki.info | 1 + editions/tw5.com/tiddlywiki.info | 1 + languages/en-PH/Buttons.multids | 13 +++++++++++++ languages/en-PH/ControlPanel.multids | 9 +++++++++ languages/en-PH/CoreReadMe.tid | 8 ++++++++ languages/en-PH/Dates.multids | 5 +++++ languages/en-PH/Docs/ModuleTypes.multids | 3 +++ languages/en-PH/Docs/PaletteColours.multids | 7 +++++++ languages/en-PH/Fields.multids | 4 ++++ languages/en-PH/Filters.multids | 3 +++ languages/en-PH/Import.multids | 3 +++ languages/en-PH/Misc.multids | 15 +++++++++++++++ languages/en-PH/Modals/Download.tid | 13 +++++++++++++ languages/en-PH/NewJournal.multids | 3 +++ languages/en-PH/icon.tid | 21 +++++++++++++++++++++ languages/en-PH/plugin.info | 8 ++++++++ 16 files changed, 117 insertions(+) create mode 100644 languages/en-PH/Buttons.multids create mode 100644 languages/en-PH/ControlPanel.multids create mode 100644 languages/en-PH/CoreReadMe.tid create mode 100644 languages/en-PH/Dates.multids create mode 100644 languages/en-PH/Docs/ModuleTypes.multids create mode 100644 languages/en-PH/Docs/PaletteColours.multids create mode 100644 languages/en-PH/Fields.multids create mode 100644 languages/en-PH/Filters.multids create mode 100644 languages/en-PH/Import.multids create mode 100644 languages/en-PH/Misc.multids create mode 100644 languages/en-PH/Modals/Download.tid create mode 100644 languages/en-PH/NewJournal.multids create mode 100644 languages/en-PH/icon.tid create mode 100644 languages/en-PH/plugin.info diff --git a/editions/full/tiddlywiki.info b/editions/full/tiddlywiki.info index 94f4c88bf..76a6b71b6 100644 --- a/editions/full/tiddlywiki.info +++ b/editions/full/tiddlywiki.info @@ -33,6 +33,7 @@ "de-AT", "de-DE", "el-GR", + "en-PH", "en-US", "es-ES", "fa-IR", diff --git a/editions/tw5.com/tiddlywiki.info b/editions/tw5.com/tiddlywiki.info index 2f3ddade8..7246d75c0 100644 --- a/editions/tw5.com/tiddlywiki.info +++ b/editions/tw5.com/tiddlywiki.info @@ -21,6 +21,7 @@ "tiddlywiki/readonly" ], "languages": [ + "" ], "build": { "index": [ diff --git a/languages/en-PH/Buttons.multids b/languages/en-PH/Buttons.multids new file mode 100644 index 000000000..9a31c9c2c --- /dev/null +++ b/languages/en-PH/Buttons.multids @@ -0,0 +1,13 @@ +title: $:/language/Buttons/ + +Clear/Hint: Clear image to solid color +Excise/Caption: cut out +Excise/Caption/Excise: Cut out +Excise/Caption/Replace: Replace cut out text with: +Excise/Hint: Cut out the selected text into a new tiddler +FullScreen/Hint: Enter or leave fullscreen mode +Paint/Caption: paint color +Paint/Hint: Set painting color +Palette/Hint: Choose the color palette +Stamp/Hint: Insert a pre–configured snippet of text +StoryView/Hint: Choose the story visualization diff --git a/languages/en-PH/ControlPanel.multids b/languages/en-PH/ControlPanel.multids new file mode 100644 index 000000000..febd33753 --- /dev/null +++ b/languages/en-PH/ControlPanel.multids @@ -0,0 +1,9 @@ +title: $:/language/ControlPanel/ + +Appearance/Hint: Ways to customize the appearance of your TiddlyWiki. +Basics/Language/Prompt: Mabuhay! Current language: +LoadedModules/Hint: These are the currently loaded tiddler modules linked to their source tiddlers. Any italicized modules lack a source tiddler, typically because they were setup during the boot process. +Palette/Editor/Names/External/Show: Show color names that are not part of the current palette +Settings/Hint: These settings let you customize the behaviour of TiddlyWiki. +TiddlerColour/Caption: Tiddler Color +TiddlerColour/Hint: This rules cascade is used to dynamically choose the color for a tiddler (used for the icon and the associated tag pill). diff --git a/languages/en-PH/CoreReadMe.tid b/languages/en-PH/CoreReadMe.tid new file mode 100644 index 000000000..a0c4d8599 --- /dev/null +++ b/languages/en-PH/CoreReadMe.tid @@ -0,0 +1,8 @@ +title: $:/core/readme + +This plugin contains TiddlyWiki's core components, comprising: + +* JavaScript code modules +* Icons +* Templates needed to create TiddlyWiki's user interface +* Philippine English (''en-PH'') translations of the localize strings used by the core diff --git a/languages/en-PH/Dates.multids b/languages/en-PH/Dates.multids new file mode 100644 index 000000000..622cba75d --- /dev/null +++ b/languages/en-PH/Dates.multids @@ -0,0 +1,5 @@ +title: $:/language/ + +RelativeDate/Future/Days: <<period>> days from today +RelativeDate/Future/Months: <<period>> months from today +RelativeDate/Future/Years: <<period>> years from today diff --git a/languages/en-PH/Docs/ModuleTypes.multids b/languages/en-PH/Docs/ModuleTypes.multids new file mode 100644 index 000000000..548bd5c77 --- /dev/null +++ b/languages/en-PH/Docs/ModuleTypes.multids @@ -0,0 +1,3 @@ +title: $:/language/Docs/ModuleTypes/ + +storyview: Story views customize the animation and behaviour of list widgets. diff --git a/languages/en-PH/Docs/PaletteColours.multids b/languages/en-PH/Docs/PaletteColours.multids new file mode 100644 index 000000000..744dc9bb8 --- /dev/null +++ b/languages/en-PH/Docs/PaletteColours.multids @@ -0,0 +1,7 @@ +title: $:/language/Docs/PaletteColours/ + +pre-background: Pre–formatted code background +pre-border: Pre–formatted code border +testcase-accent-level-1: Test case accent color with no nesting +testcase-accent-level-2: Test case accent color with 2nd level nesting +testcase-accent-level-3: Test case accent color with 3rd level nesting or higher diff --git a/languages/en-PH/Fields.multids b/languages/en-PH/Fields.multids new file mode 100644 index 000000000..ca5f65755 --- /dev/null +++ b/languages/en-PH/Fields.multids @@ -0,0 +1,4 @@ +title: $:/language/Docs/Fields/ + +class: The CSS class applied to a tiddler when rendering it—see [[Custom styles by user-class]]. Also used for [[Modals]] +color: The CSS color value associated with a tiddler diff --git a/languages/en-PH/Filters.multids b/languages/en-PH/Filters.multids new file mode 100644 index 000000000..2e3c1a6c0 --- /dev/null +++ b/languages/en-PH/Filters.multids @@ -0,0 +1,3 @@ +title: $:/language/Filters/ + +TypedTiddlers: Non–wiki-text tiddlers diff --git a/languages/en-PH/Import.multids b/languages/en-PH/Import.multids new file mode 100644 index 000000000..c54e77fba --- /dev/null +++ b/languages/en-PH/Import.multids @@ -0,0 +1,3 @@ +title: $:/language/Import/ + +Listing/Cancel/Warning: Do you want to cancel the import? diff --git a/languages/en-PH/Misc.multids b/languages/en-PH/Misc.multids new file mode 100644 index 000000000..9907c76e3 --- /dev/null +++ b/languages/en-PH/Misc.multids @@ -0,0 +1,15 @@ +title: $:/language/ + +ConfirmAction: Do you confirm you want to continue? +ConfirmCancelTiddler: Do you want to discard the changes to the tiddler "<$text text=<<title>>/>"? +ConfirmDeleteTiddler: Do you want to delete the tiddler "<$text text=<<title>>/>"? +ConfirmDeleteTiddlers: Do you want to delete <<resultCount>> tiddler(s)? +ConfirmOverwriteTiddler: Do you want to overwrite the tiddler "<$text text=<<title>>/>"? +Encryption/ConfirmClearPassword: Do you want to clear the password? This will remove the encryption applied when saving this wiki +Error/NetworkErrorAlert: `<h2>''Network Error''</h2>It looks like the connection to the server has been lost. This may indicate a problem with your network connection. Please restore your network connectivity before continuing.<br><br>''Any unsaved changes will be automatically synchronized when connectivity is restored''.` +Error/ZoominTextNode: Story View Error: It appears that you tried to interact with a tiddler which displays a custom container. This is most likely caused by using `$:/tags/StoryTiddlerTemplateFilter` with a template that contains text or whitespace at the beginning. 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: +Manager/Item/Colour: Color +MissingTiddler/Hint: Missing tiddler "<$text text=<<currentTiddler>>/>"—click {{||$:/core/ui/Buttons/edit}} to create +RecentChanges/DateFormat: DDD, MMM DD, YYYY +TagManager/Colour/Heading: Color +Tiddler/DateFormat: DDD, MMM DD, YYYY at hh12:0mm am diff --git a/languages/en-PH/Modals/Download.tid b/languages/en-PH/Modals/Download.tid new file mode 100644 index 000000000..3718d5f3c --- /dev/null +++ b/languages/en-PH/Modals/Download.tid @@ -0,0 +1,13 @@ +title: $:/language/Modals/Download +type: +subtitle: Download changes +footer: <$button message="tm-close-tiddler">Close</$button> +help: https://tiddlywiki.com/static/DownloadingChanges.html + +Your browser only supports manual saving. + +To save your modified wiki, right click on the download link below and select "Download file" or "Save file", and then choose the folder and filename. + +//You can marginally speed things up by clicking the link with the control key (Windows) or the options/alt key (Mac OS X). You will not be prompted for the folder or filename, but your browser is likely to give it an unrecognizable name—you may need to rename the file to include the `.html` extension before you can do anything useful with it.// + +On smartphones that do not allow files to be downloaded you can instead bookmark the link, and then sync your bookmarks to a desktop computer from where the wiki can be saved normally. diff --git a/languages/en-PH/NewJournal.multids b/languages/en-PH/NewJournal.multids new file mode 100644 index 000000000..f0db40fd2 --- /dev/null +++ b/languages/en-PH/NewJournal.multids @@ -0,0 +1,3 @@ +title: $:/config/NewJournal/ + +Title: DDD, MMM DD, YYYY diff --git a/languages/en-PH/icon.tid b/languages/en-PH/icon.tid new file mode 100644 index 000000000..c664ed2f0 --- /dev/null +++ b/languages/en-PH/icon.tid @@ -0,0 +1,21 @@ +title: $:/languages/en-PH/icon +type: image/svg+xml + +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1200" height="600" viewBox="-28 -45 180 90" fill="#fcd116"> + <title>Flag of the Philippines + + + + + + + + + + + + + + + + diff --git a/languages/en-PH/plugin.info b/languages/en-PH/plugin.info new file mode 100644 index 000000000..e24a80a78 --- /dev/null +++ b/languages/en-PH/plugin.info @@ -0,0 +1,8 @@ +{ + "title": "$:/languages/en-PH", + "name": "en-PH", + "plugin-type": "language", + "description": "English (PH)", + "author": "JC John Sese Cuneta", + "core-version": ">=5.3.5" +} From 47519b170385fb65057ac44a3c2caf794dddbea0 Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Tue, 8 Oct 2024 17:11:30 +0100 Subject: [PATCH 111/248] Experiments: Refactoring HelloThere (#8664) * Initial Commit * Fix default tiddlers for prerelease * Use parsermode: inline for tiddlers that don't semantically have paragraphs * Tweak card styles Cards can now grow slightly to fill the available space * Rename "Community Links" to "TiddlyWiki on the Web", and excise the items to individual tiddlers * Revert changes to core styles * Introductory text for each welcome tiddler * Colours for welcome tiddlers * Simplify introduction of GettingStarted * Update TiddlyFox information * Move all the card related definitions into their own folder Perhaps preparatory to making them into a plugin, or putting them into the core * Add a hover effect for card icons * Retract changes to GettingStarted and system fonts We'll come back to that * Revert properly --- .../tiddlers/system/DefaultTiddlers.tid | 4 + .../tiddlers/cards/card-procedures.tid | 86 ++++++ .../tw5.com/tiddlers/cards/card-styles.tid | 256 ++++++++++++++++ .../community/TiddlyWiki on the Web.tid | 15 + .../community/links/TalkTiddlyWiki.tid | 7 + .../community/links/TiddlyWiki on Discord.tid | 7 + .../community/links/TiddlyWiki on GitHub.tid | 7 + .../community/links/TiddlyWiki on Gitter.tid | 7 + .../links/TiddlyWiki on Mastodon.tid | 7 + .../links/TiddlyWiki on Open Collective.tid | 7 + .../community/links/TiddlyWiki on Reddit.tid | 7 + .../community/links/TiddlyWiki on Twitter.tid | 7 + .../community/links/TiddlyWiki on YouTube.tid | 7 + .../tiddlers/definitions/TiddlyFox.tid | 16 +- .../gettingstarted/GettingStarted.tid | 2 +- .../tiddlers/hellothere/Find Out More.tid | 15 + .../tiddlers/hellothere/HelloThere.tid | 66 +--- .../hellothere/Testimonials and Reviews.tid | 13 + .../hellothere/quickstart/Quick Start.tid | 18 +- .../tiddlers/images/Open Collective Logo.tid | 2 +- .../tiddlers/saving/Saving on TiddlyHost.tid | 2 + .../tiddlers/saving/Saving with FireFox.tid | 17 -- .../Saving with TiddlyFox on Android.tid | 26 -- .../tiddlers/system/DefaultTiddlers.tid | 4 + .../tiddlers/system/tw5.com-card-template.tid | 6 - .../tiddlers/system/tw5.com-styles.tid | 281 ------------------ .../tiddlers/system/wikitext-macros.tid | 45 --- .../Testimonials - Product Hunt.tid | 2 + 28 files changed, 486 insertions(+), 453 deletions(-) create mode 100644 editions/tw5.com/tiddlers/cards/card-procedures.tid create mode 100644 editions/tw5.com/tiddlers/cards/card-styles.tid create mode 100644 editions/tw5.com/tiddlers/community/TiddlyWiki on the Web.tid create mode 100644 editions/tw5.com/tiddlers/community/links/TalkTiddlyWiki.tid create mode 100644 editions/tw5.com/tiddlers/community/links/TiddlyWiki on Discord.tid create mode 100644 editions/tw5.com/tiddlers/community/links/TiddlyWiki on GitHub.tid create mode 100644 editions/tw5.com/tiddlers/community/links/TiddlyWiki on Gitter.tid create mode 100644 editions/tw5.com/tiddlers/community/links/TiddlyWiki on Mastodon.tid create mode 100644 editions/tw5.com/tiddlers/community/links/TiddlyWiki on Open Collective.tid create mode 100644 editions/tw5.com/tiddlers/community/links/TiddlyWiki on Reddit.tid create mode 100644 editions/tw5.com/tiddlers/community/links/TiddlyWiki on Twitter.tid create mode 100644 editions/tw5.com/tiddlers/community/links/TiddlyWiki on YouTube.tid create mode 100644 editions/tw5.com/tiddlers/hellothere/Find Out More.tid create mode 100644 editions/tw5.com/tiddlers/hellothere/Testimonials and Reviews.tid delete mode 100644 editions/tw5.com/tiddlers/saving/Saving with FireFox.tid delete mode 100644 editions/tw5.com/tiddlers/saving/Saving with TiddlyFox on Android.tid delete mode 100644 editions/tw5.com/tiddlers/system/tw5.com-card-template.tid diff --git a/editions/prerelease/tiddlers/system/DefaultTiddlers.tid b/editions/prerelease/tiddlers/system/DefaultTiddlers.tid index c947fd59a..66d1c9bab 100644 --- a/editions/prerelease/tiddlers/system/DefaultTiddlers.tid +++ b/editions/prerelease/tiddlers/system/DefaultTiddlers.tid @@ -4,5 +4,9 @@ title: $:/DefaultTiddlers [[TiddlyWiki Pre-release]] HelloThere +[[Quick Start]] +[[Find Out More]] +[[TiddlyWiki on the Web]] +[[Testimonials and Reviews]] GettingStarted Community diff --git a/editions/tw5.com/tiddlers/cards/card-procedures.tid b/editions/tw5.com/tiddlers/cards/card-procedures.tid new file mode 100644 index 000000000..f548d69ac --- /dev/null +++ b/editions/tw5.com/tiddlers/cards/card-procedures.tid @@ -0,0 +1,86 @@ +code-body: yes +tags: $:/tags/Macro +title: $:/cards/procedures +type: text/vnd.tiddlywiki + +\whitespace trim + +\procedure flex-card(class,bordercolor:"",backgroundcolor:"",textcolor:"",imageField:"image",captionField:"caption",subtitle:"",descriptionField:"description",linkField:"link") +<$link class={{{ [addprefix[tc-card ]] }}} + to={{{ [getelse] }}} + aria-label=<> +> + <$transclude + $variable="flex-card-body" + bordercolor=<> + backgroundcolor=<> + textcolor=<> + imageField=<> + captionField=<> + subtitle=<> + descriptionField=<> + /> + +\end + +\procedure flex-card-external(class,bordercolor:"",backgroundcolor:"",textcolor:"",imageField:"image",captionField:"caption",subtitle:"",descriptionField:"description",linkField:"url") +addprefix[tc-card ]addprefix[tc-tiddlylink ]] }}} + href={{{ [get] }}} + aria-label=<> + rel="noopener noreferrer" + target="_blank" +> + <$transclude + $variable="flex-card-body" + bordercolor=<> + backgroundcolor=<> + textcolor=<> + imageField=<> + captionField=<> + subtitle=<> + descriptionField=<> + /> + +\end + +\procedure flex-card-body(bordercolor,backgroundcolor,textcolor,imageField,captionField,subtitle,descriptionField) +
!is[blank]addprefix[5px solid ]] }}} style.background={{!!background}} style.backgroundColor=<> style.color=<> style.fill=<>> + <$list filter="[has[ribbon-text]]" variable="ignore"> + + + <$list filter="[has]" variable="ignore"> +
+ <$image source={{{ [get] }}} + alt={{{ [getget[alt-text]else[Image.]] }}} + /> +
+ +
<$transclude field=<>><$view field="title"/>
+ <$list filter="[!is[blank]]" variable="ignore"> +
+ <$text text=<>/> +
+ +
<$transclude tiddler={{!!icon}}/>
+ <%if [all[current]getelse[]!match[]] %> +
+
+ <$transclude field=<> mode="block"/> +
+
+
+
+ <%endif%> + <%if [all[current]has[button-text]] %> +
+ <$text text={{!!button-text}}/> {{$:/core/images/chevron-right}} +
+ <%endif%> +
+\end diff --git a/editions/tw5.com/tiddlers/cards/card-styles.tid b/editions/tw5.com/tiddlers/cards/card-styles.tid new file mode 100644 index 000000000..7b95b699a --- /dev/null +++ b/editions/tw5.com/tiddlers/cards/card-styles.tid @@ -0,0 +1,256 @@ +tags: $:/tags/Stylesheet +title: $:/cards/styles +type: text/vnd.tiddlywiki + +\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock + +.tc-cards { + display: flex; + flex-wrap: wrap; + justify-content: space-evenly; + width: 100%; + padding: 0.5em; + background: <>; + border-color: rgba(34,36,38,.15); + box-shadow: 0 2px 25px 0 rgb(34 36 38 / 5%) inset; + gap: 1em; +} + +.tc-cards.tc-small { + text-align: center; + font-size: 0.7em; +} + +.tc-cards.tc-action-card { + text-align: center; + background: none; +} + +.tc-cards.tc-cards-vertical { +} + +.tc-cards.tc-action-card .tc-card-button { + border: 1px solid <>; + background: <>; + margin: 0.5em; + border-radius: 6px; + padding: 0.5em; + color: <>; + fill: <>; +} + +.tc-cards.tc-action-card .tc-card-button svg { + width: 0.65em; + height: 0.65em; + vertical-align: middle; +} + +.tc-tiddlylink.tc-card { + font-weight: normal; + flex-grow: 1; + max-width: 250px; + position: relative; + background: <>; + color: <>; + width: 200px; + min-height: 0; + border: none; + border-radius: 8px; + box-shadow: 0 1px 3px 0 #d4d4d5, 0 0 0 1px #d4d4d5; + transition: box-shadow 0.3s ease,transform .3s ease; +} + +.tc-cards.tc-cards-vertical .tc-tiddlylink.tc-card { + width: 100%; +} + +@media (max-width: 500px) { + + .tc-cards { + padding: 0; + } + + .tc-tiddlylink.tc-card { + margin: 0.25em; + width: 45%; + } + +} + +.tc-tiddlylink.tc-card.tc-card-quote { + width: 320px; + box-shadow: none; + background-color: #effdff; +} + +.tc-card-accent { + height: 100%; + display: flex; + align-items: stretch; + flex-direction: column; + justify-content: stretch; + border-radius: 8px; +} + +.tc-cards.tc-cards-vertical .tc-card-accent { + flex-direction: row; + justify-content: start; + padding: 5px 7px; + align-items: center; +} + +.tc-cards.tc-cards-vertical .tc-card-icon { + line-height: 0; + order: 1; +} + +.tc-tiddlylink.tc-card:hover { + color: <>; + background: <>; + text-decoration: none; + cursor: pointer; + box-shadow: 0 1px 5px 0 #bcbdbd, 0 0 0 1px #d4d4d5; + transform: translateY(-3px); +} + +.tc-card-ribbon-wrapper { + line-height: 0; + width: 75px; + height: 75px; + position: absolute; + right: 0; + overflow: hidden; + top: 0; + z-index: 849; + pointer-events: none; +} + +.tc-card-ribbon { + transition: top 0.3s ease-in-out; + top: 15px; + right: -77px; + position: absolute; + transform: rotate(45deg); + background-color: red; + box-shadow: 0px 0px 2px 0px rgb(0 0 0 / 50%); +} + +.tc-tiddlylink.tc-card:hover .tc-card-ribbon { + top: -77px; +} + +.tc-card-ribbon-inner { + font-size: 10px; + line-height: 13px; + font-weight: 700; + color: white; + text-decoration: none; + text-shadow: 0 -1px rgb(0 0 0 / 50%); + width: 200px; + display: inline-block; + padding: 2px 0; + text-align: center; +} + +.tc-card-image { + border-top-left-radius: 8px; + border-top-right-radius: 8px; + line-height: 0; + overflow: hidden; +} + +.tc-card-image img { + border-top-left-radius: 8px; + border-top-right-radius: 8px; + width: 100%; + transition: transform 0.3s ease-in-out; +} + +.tc-tiddlylink.tc-card:hover .tc-card-image img { + transform: scale(1.05); +} + +.tc-card .tc-card-icon svg { + transition: transform 0.3s ease-in-out; +} + +.tc-card:hover .tc-card-icon svg { + transform: scale(1.1); +} + +.tc-card-title { + font-size: 1.2em; + line-height: 1.2; + font-weight: 600; + transition: color 0.3s ease-in-out; + padding: 0 10px; + margin: 0.5em 0 0.25em 0; +} + +.tc-cards.tc-cards-vertical .tc-card-title { + font-size: 1.1em; + min-width: 10em; + order: 2; +} + +.tc-cards.tc-cards-vertical .tc-card-title svg { + width: 1em; + height: 1em; + vertical-align: text-bottom; +} + +.tc-card-subtitle, +.tc-card-author { + font-size: 0.8em; + line-height: 1.2; + color: <>; + padding: 0 10px; + margin: 0.5em 0; + font-style: italic; +} + +.tc-card-body { + font-size: 0.9em; + line-height: 1.2; + padding: 0.25em 10px; + margin: 0; +} + +.tc-cards.tc-cards-vertical .tc-card-body { + font-size: 1em; +} + +.tc-card-body-wrapper { + position: relative; + flex-grow: 1; +} + +.tc-tiddlylink.tc-card.tc-card-quote .tc-card-body:before { + font-family: Georgia, serif; + color: <>; + content: open-quote; + font-size: 5em; + line-height: 1; + float: left; +} + +.tc-tiddlylink.tc-card.tc-card-quote .tc-card-body:after { + font-family: Georgia, serif; + color: <>; + content: close-quote; + font-size: 5em; + line-height: 1; + float: right; +} + +.tc-tiddlylink.tc-card .tc-card-body-clear { + clear: both; +} + +.tc-card-body > p { + margin: 0.25em 0; +} + +.tc-card a:active, .tc-card a:focus, .tc-btn-download:active, .tc-btn-download:focus{ + outline: none; +} \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/community/TiddlyWiki on the Web.tid b/editions/tw5.com/tiddlers/community/TiddlyWiki on the Web.tid new file mode 100644 index 000000000..0af1b78a8 --- /dev/null +++ b/editions/tw5.com/tiddlers/community/TiddlyWiki on the Web.tid @@ -0,0 +1,15 @@ +modified: 20241001141521924 +tags: TableOfContents +title: TiddlyWiki on the Web +type: text/vnd.tiddlywiki +icon: $:/core/images/link +color: #808 +list: TalkTiddlyWiki [[TiddlyWiki on YouTube]] [[TiddlyWiki on Reddit]] [[TiddlyWiki on Discord]] [[TiddlyWiki on GitHub]] [[TiddlyWiki on Mastodon]] [[TiddlyWiki on Twitter]] [[TiddlyWiki on Gitter]] [[TiddlyWiki on Open Collective]] + +Links to the ~TiddlyWiki community elsewhere on the web. + +
+<$list filter="[tag[TiddlyWiki on the Web]]"> +<$macrocall $name="flex-card-external" backgroundcolor={{!!background-color}} textcolor={{!!text-color}} captionField="caption"/> + +
diff --git a/editions/tw5.com/tiddlers/community/links/TalkTiddlyWiki.tid b/editions/tw5.com/tiddlers/community/links/TalkTiddlyWiki.tid new file mode 100644 index 000000000..413edd1cd --- /dev/null +++ b/editions/tw5.com/tiddlers/community/links/TalkTiddlyWiki.tid @@ -0,0 +1,7 @@ +title: TalkTiddlyWiki +caption: ~TalkTiddlyWiki +tags: [[TiddlyWiki on the Web]] +url: https://talk.tiddlywiki.org/ +icon: $:/core/images/help +background-color: #FF8C19 +text-color: #fff diff --git a/editions/tw5.com/tiddlers/community/links/TiddlyWiki on Discord.tid b/editions/tw5.com/tiddlers/community/links/TiddlyWiki on Discord.tid new file mode 100644 index 000000000..f9450927d --- /dev/null +++ b/editions/tw5.com/tiddlers/community/links/TiddlyWiki on Discord.tid @@ -0,0 +1,7 @@ +title: TiddlyWiki on Discord +caption: Discord +tags: [[TiddlyWiki on the Web]] +url: https://discord.gg/HFFZVQ8 +icon: $:/core/images/globe +background-color: #5462EB +text-color: #fff diff --git a/editions/tw5.com/tiddlers/community/links/TiddlyWiki on GitHub.tid b/editions/tw5.com/tiddlers/community/links/TiddlyWiki on GitHub.tid new file mode 100644 index 000000000..64e49fbf8 --- /dev/null +++ b/editions/tw5.com/tiddlers/community/links/TiddlyWiki on GitHub.tid @@ -0,0 +1,7 @@ +title: TiddlyWiki on GitHub +caption: ~GitHub +tags: [[TiddlyWiki on the Web]] +url: https://github.com/TiddlyWiki/TiddlyWiki5 +icon: $:/core/images/github +background-color: #444 +text-color: #fff diff --git a/editions/tw5.com/tiddlers/community/links/TiddlyWiki on Gitter.tid b/editions/tw5.com/tiddlers/community/links/TiddlyWiki on Gitter.tid new file mode 100644 index 000000000..07474b4e3 --- /dev/null +++ b/editions/tw5.com/tiddlers/community/links/TiddlyWiki on Gitter.tid @@ -0,0 +1,7 @@ +title: TiddlyWiki on Gitter +caption: Gitter +tags: [[TiddlyWiki on the Web]] +url: https://gitter.im/TiddlyWiki/public +icon: $:/core/images/gitter +background-color: #753a88 +text-color: #fff diff --git a/editions/tw5.com/tiddlers/community/links/TiddlyWiki on Mastodon.tid b/editions/tw5.com/tiddlers/community/links/TiddlyWiki on Mastodon.tid new file mode 100644 index 000000000..c9ebe006f --- /dev/null +++ b/editions/tw5.com/tiddlers/community/links/TiddlyWiki on Mastodon.tid @@ -0,0 +1,7 @@ +title: TiddlyWiki on Mastodon +caption: Mastodon +tags: [[TiddlyWiki on the Web]] +url: https://fosstodon.org/@TiddlyWiki +icon: $:/core/images/mastodon +background-color: #2b90d9 +text-color: #fff diff --git a/editions/tw5.com/tiddlers/community/links/TiddlyWiki on Open Collective.tid b/editions/tw5.com/tiddlers/community/links/TiddlyWiki on Open Collective.tid new file mode 100644 index 000000000..e5fa69124 --- /dev/null +++ b/editions/tw5.com/tiddlers/community/links/TiddlyWiki on Open Collective.tid @@ -0,0 +1,7 @@ +title: TiddlyWiki on Open Collective +caption: Open Collective +tags: [[TiddlyWiki on the Web]] +url: https://opencollective.com/tiddlywiki +icon: Open Collective Logo +background-color: #0c2c66 +text-color: #fff diff --git a/editions/tw5.com/tiddlers/community/links/TiddlyWiki on Reddit.tid b/editions/tw5.com/tiddlers/community/links/TiddlyWiki on Reddit.tid new file mode 100644 index 000000000..20f292de8 --- /dev/null +++ b/editions/tw5.com/tiddlers/community/links/TiddlyWiki on Reddit.tid @@ -0,0 +1,7 @@ +title: TiddlyWiki on Reddit +caption: Reddit +tags: [[TiddlyWiki on the Web]] +url: https://www.reddit.com/r/TiddlyWiki5/ +icon: Reddit Logo +background-color: #FF4500 +text-color: #fff diff --git a/editions/tw5.com/tiddlers/community/links/TiddlyWiki on Twitter.tid b/editions/tw5.com/tiddlers/community/links/TiddlyWiki on Twitter.tid new file mode 100644 index 000000000..643610e61 --- /dev/null +++ b/editions/tw5.com/tiddlers/community/links/TiddlyWiki on Twitter.tid @@ -0,0 +1,7 @@ +title: TiddlyWiki on Twitter +caption: Twitter +tags: [[TiddlyWiki on the Web]] +url: https://twitter.com/TiddlyWiki +icon: $:/core/images/twitter +background-color: #1DA1F2 +text-color: #fff diff --git a/editions/tw5.com/tiddlers/community/links/TiddlyWiki on YouTube.tid b/editions/tw5.com/tiddlers/community/links/TiddlyWiki on YouTube.tid new file mode 100644 index 000000000..bf5523c92 --- /dev/null +++ b/editions/tw5.com/tiddlers/community/links/TiddlyWiki on YouTube.tid @@ -0,0 +1,7 @@ +title: TiddlyWiki on YouTube +caption: ~YouTube +tags: [[TiddlyWiki on the Web]] +url: https://www.youtube.com/c/JeremyRuston +icon: $:/core/images/video +background-color: #e52d27 +text-color: #fff diff --git a/editions/tw5.com/tiddlers/definitions/TiddlyFox.tid b/editions/tw5.com/tiddlers/definitions/TiddlyFox.tid index 1015b83b3..431159742 100644 --- a/editions/tw5.com/tiddlers/definitions/TiddlyFox.tid +++ b/editions/tw5.com/tiddlers/definitions/TiddlyFox.tid @@ -1,21 +1,9 @@ created: 20130825161100000 -modified: 20230803051056946 +modified: 20241006202631647 tags: Definitions title: TiddlyFox type: text/vnd.tiddlywiki -<<.deprecated-since "FireFox 57" "Saving">> - -TiddlyFox is an extension for older versions of Firefox that allows standalone TiddlyWiki files to save their changes directly to the file system. TiddlyFox works on both desktop and smartphone versions of Firefox. See [[Saving with TiddlyFox]] or [[Saving with TiddlyFox on Android]] for detailed instructions. +TiddlyFox was an extension for older versions of Firefox that allowed standalone TiddlyWiki files to save their changes directly to the file system. TiddlyFox is now obsolete due to its incompatibility with the latest versions of Firefox - see [[TiddlyFox Apocalypse]]. There are many alternatives to TiddlyFox, but none that work in precisely the same way -- see GettingStarted for details. - -TiddlyFox can be downloaded from the Mozilla Addons site: - -https://addons.mozilla.org/en-GB/firefox/addon/tiddlyfox/ - -<<< -You can also install the latest development version of TiddlyFox direct from GitHub: - -https://github.com/TiddlyWiki/TiddlyFox/raw/master/tiddlyfox.xpi -<<< diff --git a/editions/tw5.com/tiddlers/gettingstarted/GettingStarted.tid b/editions/tw5.com/tiddlers/gettingstarted/GettingStarted.tid index 193c02c70..00871f3f1 100644 --- a/editions/tw5.com/tiddlers/gettingstarted/GettingStarted.tid +++ b/editions/tw5.com/tiddlers/gettingstarted/GettingStarted.tid @@ -12,4 +12,4 @@ The next step is to choose a method for saving changes. There's a wide variety o <<.warning "Don't attempt to use the browser ''File''/''Save'' menu option to save changes (it doesn't work)">>

-{{Saving}} +{{Saving}} \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/hellothere/Find Out More.tid b/editions/tw5.com/tiddlers/hellothere/Find Out More.tid new file mode 100644 index 000000000..c2b73703e --- /dev/null +++ b/editions/tw5.com/tiddlers/hellothere/Find Out More.tid @@ -0,0 +1,15 @@ +modified: 20241001141521924 +tags: TableOfContents +title: Find Out More +type: text/vnd.tiddlywiki +icon: $:/core/images/help +color: #880 + +Resources to help you learn more about ~TiddlyWiki and its community. + +
+<$list filter="[tag[HelloThumbnail]]"> +<$macrocall $name="flex-card" captionField="caption" descriptionField="text"/> + +
+ diff --git a/editions/tw5.com/tiddlers/hellothere/HelloThere.tid b/editions/tw5.com/tiddlers/hellothere/HelloThere.tid index 046241812..46c9deb7d 100644 --- a/editions/tw5.com/tiddlers/hellothere/HelloThere.tid +++ b/editions/tw5.com/tiddlers/hellothere/HelloThere.tid @@ -1,73 +1,17 @@ created: 20130822170200000 list: [[A Gentle Guide to TiddlyWiki]] [[Discover TiddlyWiki]] [[Some of the things you can do with TiddlyWiki]] [[Ten reasons to switch to TiddlyWiki]] Examples [[What happened to the original TiddlyWiki?]] -modified: 20240710115948992 +modified: 20241001141521924 tags: TableOfContents title: HelloThere type: text/vnd.tiddlywiki +icon: $:/core/icon !!.tc-hero-heading ''Welcome to TiddlyWiki, a unique [[non-linear|Philosophy of Tiddlers]] notebook for [[capturing|Creating and editing tiddlers]], [[organising|Structuring TiddlyWiki]] and [[sharing|Sharing your tiddlers with others]] complex information'' 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'' +* ~TiddlyWiki is infinitely customisable and extensible with many plugins that add new features -
-<$list filter="[tag[Quick Start]]"> -<$macrocall $name="flex-card" bordercolor={{!!color}} textcolor={{!!text-color}} backgroundcolor={{!!background-color}} captionField="caption" descriptionField="text"/> - -
-
-<$link to="中文社区 - Chinese Community" class="tc-btn-big-green tc-card" aria-label="Chinese Community"> -中文社区
Chinese Community - -
- -!! ''Find Out More'' - -
-<$list filter="[tag[HelloThumbnail]]"> -<$macrocall $name="flex-card" captionField="caption" descriptionField="text"/> - -
- -!! ''Community'' - - - -!! ''Testimonials & Reviews'' - -
-<$list filter="[tag[Testimonial]]"> -<$macrocall $name="flex-card" class="tc-card-quote" captionField="caption" descriptionField="text"/> - -
+* ~TiddlyWiki is the product of a collective of developers, part of an extensive community of users diff --git a/editions/tw5.com/tiddlers/hellothere/Testimonials and Reviews.tid b/editions/tw5.com/tiddlers/hellothere/Testimonials and Reviews.tid new file mode 100644 index 000000000..d33f8fa5d --- /dev/null +++ b/editions/tw5.com/tiddlers/hellothere/Testimonials and Reviews.tid @@ -0,0 +1,13 @@ +modified: 20241001141521924 +tags: TableOfContents +title: Testimonials and Reviews +type: text/vnd.tiddlywiki +icon: $:/core/images/star-filled +color: #088 + +\parsermode inline +
+<$list filter="[tag[Testimonial]]"> +<$macrocall $name="flex-card" class="tc-card-quote" captionField="caption" descriptionField="text"/> + +
\ No newline at end of file diff --git a/editions/tw5.com/tiddlers/hellothere/quickstart/Quick Start.tid b/editions/tw5.com/tiddlers/hellothere/quickstart/Quick Start.tid index ff7bec946..d57c3f5ab 100644 --- a/editions/tw5.com/tiddlers/hellothere/quickstart/Quick Start.tid +++ b/editions/tw5.com/tiddlers/hellothere/quickstart/Quick Start.tid @@ -1,2 +1,18 @@ title: Quick Start -list: [[Quick Start: Tiddlyhost]] [[Quick Start: Desktop]] [[Quick Start: DIY]] [[Quick Start: Xememex]] \ No newline at end of file +modified: 20241001141521924 +list: [[Quick Start: Tiddlyhost]] [[Quick Start: Desktop]] [[Quick Start: DIY]] [[Quick Start: Xememex]] +icon: $:/core/images/tip +color: #cc9 + +Choose how to get started quickly with ~TiddlyWiki. + +
+<$list filter="[tag[Quick Start]]"> +<$macrocall $name="flex-card" bordercolor={{!!color}} textcolor={{!!text-color}} backgroundcolor={{!!background-color}} captionField="caption" descriptionField="text"/> + +
+
+<$link to="中文社区 - Chinese Community" class="tc-btn-big-green tc-card" aria-label="Chinese Community"> +中文社区
Chinese Community + +
diff --git a/editions/tw5.com/tiddlers/images/Open Collective Logo.tid b/editions/tw5.com/tiddlers/images/Open Collective Logo.tid index dbafad946..b7399033e 100644 --- a/editions/tw5.com/tiddlers/images/Open Collective Logo.tid +++ b/editions/tw5.com/tiddlers/images/Open Collective Logo.tid @@ -4,4 +4,4 @@ tags: picture title: Open Collective Logo alt-text: Open Collective Logo - \ No newline at end of file + \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/saving/Saving on TiddlyHost.tid b/editions/tw5.com/tiddlers/saving/Saving on TiddlyHost.tid index 8931c71be..d69eea3b1 100644 --- a/editions/tw5.com/tiddlers/saving/Saving on TiddlyHost.tid +++ b/editions/tw5.com/tiddlers/saving/Saving on TiddlyHost.tid @@ -15,3 +15,5 @@ type: text/vnd.tiddlywiki [[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. + +If you find Tiddlyhost useful, please consider [[donation or sponsorship|https://tiddlyhost.com/donate]]. diff --git a/editions/tw5.com/tiddlers/saving/Saving with FireFox.tid b/editions/tw5.com/tiddlers/saving/Saving with FireFox.tid deleted file mode 100644 index 2a3b3bd19..000000000 --- a/editions/tw5.com/tiddlers/saving/Saving with FireFox.tid +++ /dev/null @@ -1,17 +0,0 @@ -caption: Saving with ~FireFox -created: 20230803205140949 -modified: 20230803213246739 -tags: Saving Firefox -title: Saving with FireFox - -# Restart [[Firefox]] -# [[Download]] an empty TiddlyWiki by clicking this button: -#> {{$:/editions/tw5.com/snippets/download-empty-button}} -# Locate the file you just downloaded -#* You may rename it, but be sure to keep the `.html` or `.htm` extension -# Open the file in [[Firefox]] - -# Try creating a new tiddler using the ''new tiddler'' <<.icon $:/core/images/new-button>> button in the sidebar. Type some content for the tiddler, and click the <<.icon $:/core/images/done-button>> ''ok'' button -# Save your changes by clicking the <<.icon $:/core/images/save-button-dynamic>> ''save changes'' button in the sidebar -#* Look for the yellow notification ''Saved wiki'' at the top right of the window -# Refresh the browser window to verify that your changes have been saved correctly diff --git a/editions/tw5.com/tiddlers/saving/Saving with TiddlyFox on Android.tid b/editions/tw5.com/tiddlers/saving/Saving with TiddlyFox on Android.tid deleted file mode 100644 index 049129a0d..000000000 --- a/editions/tw5.com/tiddlers/saving/Saving with TiddlyFox on Android.tid +++ /dev/null @@ -1,26 +0,0 @@ -created: 20140103134551508 -modified: 20230803051340676 -tags: [[Saving with TiddlyFox]] -title: Saving with TiddlyFox on Android -type: text/vnd.tiddlywiki - -<<.deprecated-since "FireFox 57" "Saving">> - -(Alternatively, see the [[video tutorial|TiddlyWiki on Firefox for Android Video]]) - -# Ensure you have the latest version of [[Firefox for Android|http://getfirefox.com]] -#* http://getfirefox.com -# Install the latest release of the TiddlyFox extension from: -#* https://addons.mozilla.org/en-GB/firefox/addon/tiddlyfox/ -# Install this extension to be able to save the TiddlyWiki file locally: -#* https://addons.mozilla.org/en-GB/android/addon/save-link-menus/ -# [[Download]] an empty TiddlyWiki by saving this link: -#* https://tiddlywiki.com/empty.html -#> (to save the link, ensure you've installed the "save-link-menus" extension and then long-press on the link and choose "Save link") -# When the file has downloaded, click on it within the notification tray or the download manager application -# Choose to open the file in Firefox (rather than the default Android viewer) -# Click ''OK'' in response to the prompt from TiddlyFox that asks whether to enable saving for this file -# Try creating a new tiddler using the ''new tiddler'' <<.icon $:/core/images/new-button>> button in the sidebar. Type some content for the tiddler, and click the <<.icon $:/core/images/done-button>> ''ok'' button -# Save your changes by clicking the <<.icon $:/core/images/save-button-dynamic>> ''save changes'' button in the sidebar -#* Look for the yellow notification ''Saved wiki'' at the top right of the window -# Refresh the browser window to verify that your changes have been saved correctly diff --git a/editions/tw5.com/tiddlers/system/DefaultTiddlers.tid b/editions/tw5.com/tiddlers/system/DefaultTiddlers.tid index e10c566b9..7b9e94cbc 100644 --- a/editions/tw5.com/tiddlers/system/DefaultTiddlers.tid +++ b/editions/tw5.com/tiddlers/system/DefaultTiddlers.tid @@ -4,5 +4,9 @@ title: $:/DefaultTiddlers type: text/vnd.tiddlywiki HelloThere +[[Quick Start]] +[[Find Out More]] +[[TiddlyWiki on the Web]] +[[Testimonials and Reviews]] GettingStarted Community diff --git a/editions/tw5.com/tiddlers/system/tw5.com-card-template.tid b/editions/tw5.com/tiddlers/system/tw5.com-card-template.tid deleted file mode 100644 index a2400a739..000000000 --- a/editions/tw5.com/tiddlers/system/tw5.com-card-template.tid +++ /dev/null @@ -1,6 +0,0 @@ -created: 20200507002521489 -modified: 20220719134613555 -title: $:/_tw5.com-card-template -type: text/vnd.tiddlywiki - -<$macrocall $name="flex-card" bordercolor={{!!color}} captionField="caption" subtitle={{{ [{!!community-author}!is[blank]addprefix[by ]] }}}/> diff --git a/editions/tw5.com/tiddlers/system/tw5.com-styles.tid b/editions/tw5.com/tiddlers/system/tw5.com-styles.tid index dd60694f4..f3618afc9 100644 --- a/editions/tw5.com/tiddlers/system/tw5.com-styles.tid +++ b/editions/tw5.com/tiddlers/system/tw5.com-styles.tid @@ -82,291 +82,10 @@ type: text/vnd.tiddlywiki height: 1em; } - - .tc-wrapper-flex { display: flex; } -.tc-saving-sidebar { - margin: 0; - padding: 0; - min-width: 200px; - overflow: auto; -} - -.tc-saving-sidebar a { - display: block; -} - -@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) { - .tc-wrapper-flex { - flex-direction: column; - } - .tc-saving-sidebar { - width: 100%; - height: auto; - } - .tc-saving-sidebar a { - float: left; - } -} - -.tc-saving-sidebar-category { - margin-bottom: 10px; -} - -.tc-saving-sidebar-category-title { - font-weight: bold; - margin-bottom: 5px; - font-size: 16px; -} - -.tc-saving-sidebar-category-item { - margin-left: 10px; -} - -.tc-saving-introduction { - display: flex; - justify-content: center; - text-align: center; - align-items: center; - padding: 4em; - font-style: italic; -} - -.tc-cards { - display: flex; - flex-wrap: wrap; - justify-content: space-evenly; - width: 100%; - padding: 0.5em; - background: <>; - border-color: rgba(34,36,38,.15); - box-shadow: 0 2px 25px 0 rgb(34 36 38 / 5%) inset; - gap: 1em; -} - -.tc-cards.tc-small { - text-align: center; - font-size: 0.7em; -} - -.tc-cards.tc-action-card { - text-align: center; - background: none; -} - -.tc-cards.tc-action-card .tc-card-button { - border: 1px solid <>; - background: <>; - margin: 0.5em; - border-radius: 6px; - padding: 0.5em; - color: <>; - fill: <>; -} - -.tc-cards.tc-action-card .tc-card-button svg { - width: 0.65em; - height: 0.65em; - vertical-align: middle; -} - -.tc-tiddlylink.tc-card { - font-weight: normal; - max-width: 100%; - position: relative; - background: <>; - color: <>; - width: 200px; - min-height: 0; - border: none; - border-radius: 8px; - box-shadow: 0 1px 3px 0 #d4d4d5, 0 0 0 1px #d4d4d5; - transition: box-shadow 0.3s ease,transform .3s ease; -} - -.tc-cards.tc-cards-vertical .tc-tiddlylink.tc-card { - width: 100%; -} - -@media (max-width: 500px) { - - .tc-cards { - padding: 0; - } - - .tc-tiddlylink.tc-card { - margin: 0.25em; - width: 45%; - } - -} - -.tc-tiddlylink.tc-card.tc-card-quote { - width: 320px; - box-shadow: none; - background-color: #effdff; -} - -.tc-card-accent { - height: 100%; - display: flex; - align-items: stretch; - flex-direction: column; - justify-content: stretch; - border-radius: 8px; -} - -.tc-cards.tc-cards-vertical .tc-card-accent { - flex-direction: row; - align-items: center; -} - -.tc-tiddlylink.tc-card:hover { - color: <>; - background: <>; - text-decoration: none; - cursor: pointer; - box-shadow: 0 1px 5px 0 #bcbdbd, 0 0 0 1px #d4d4d5; - transform: translateY(-3px); -} - -.tc-card-ribbon-wrapper { - line-height: 0; - width: 75px; - height: 75px; - position: absolute; - right: 0; - overflow: hidden; - top: 0; - z-index: 849; - pointer-events: none; -} - -.tc-card-ribbon { - transition: top 0.3s ease-in-out; - top: 15px; - right: -77px; - position: absolute; - transform: rotate(45deg); - background-color: red; - box-shadow: 0px 0px 2px 0px rgb(0 0 0 / 50%); -} - -.tc-tiddlylink.tc-card:hover .tc-card-ribbon { - top: -77px; -} - -.tc-card-ribbon-inner { - font-size: 10px; - line-height: 13px; - font-weight: 700; - color: white; - text-decoration: none; - text-shadow: 0 -1px rgb(0 0 0 / 50%); - width: 200px; - display: inline-block; - padding: 2px 0; - text-align: center; -} - -.tc-card-image { - border-top-left-radius: 8px; - border-top-right-radius: 8px; - line-height: 0; - overflow: hidden; -} - -.tc-card-image img { - border-top-left-radius: 8px; - border-top-right-radius: 8px; - width: 100%; - transition: transform 0.3s ease-in-out; -} - -.tc-tiddlylink.tc-card:hover .tc-card-image img { - transform: scale(1.05); -} - -.tc-card-title { - font-size: 1.2em; - line-height: 1.2; - font-weight: 600; - transition: color 0.3s ease-in-out; - padding: 0 10px; - margin: 0.5em 0 0.25em 0; -} - -.tc-cards.tc-cards-vertical .tc-card-title { - font-size: 1em; - min-width: 10em; - text-align: right; -} - -.tc-cards.tc-cards-vertical .tc-card-title svg { - width: 1em; - height: 1em; - vertical-align: text-bottom; -} - -.tc-card-subtitle, -.tc-card-author { - font-size: 0.8em; - line-height: 1.2; - color: <>; - padding: 0 10px; - margin: 0.5em 0; - font-style: italic; -} - -.tc-card-body { - font-size: 0.9em; - line-height: 1.2; - padding: 0.25em 10px; - margin: 0; -} - -.tc-cards.tc-cards-vertical .tc-card-body { - font-size: 1em; -} - -.tc-card-body-wrapper { - position: relative; - flex-grow: 1; -} - -.tc-tiddlylink.tc-card.tc-card-quote .tc-card-body:before { - font-family: Georgia, serif; - color: <>; - content: open-quote; - font-size: 5em; - line-height: 1; - float: left; -} - -.tc-tiddlylink.tc-card.tc-card-quote .tc-card-body:after { - font-family: Georgia, serif; - color: <>; - content: close-quote; - font-size: 5em; - line-height: 1; - float: right; -} - -.tc-tiddlylink.tc-card .tc-card-body-clear { - clear: both; -} - -.tc-card-body > p { - margin: 0.25em 0; -} - -.tc-card a:active, .tc-card a:focus, .tc-btn-download:active, .tc-btn-download:focus{ - outline: none; -} - .tc-btn-download { padding: 10px 30px; border-radius: 5px; diff --git a/editions/tw5.com/tiddlers/system/wikitext-macros.tid b/editions/tw5.com/tiddlers/system/wikitext-macros.tid index 796f949a7..f598cf240 100644 --- a/editions/tw5.com/tiddlers/system/wikitext-macros.tid +++ b/editions/tw5.com/tiddlers/system/wikitext-macros.tid @@ -87,48 +87,3 @@ type: text/vnd.tiddlywiki <$link to=<>/>: <$transclude $variable=tw-code tiddler=<> /> \end - -\procedure flex-card(class,bordercolor:"",backgroundcolor:"",textcolor:"",imageField:"image",captionField:"caption",subtitle:"",descriptionField:"description",linkField:"link") -<$link class={{{ [addprefix[tc-card ]] }}} - to={{{ [getelse] }}} - aria-label=<> -> -
!is[blank]addprefix[5px solid ]] }}} style.background={{!!background}} style.backgroundColor=<> style.color=<> style.fill=<>> - <$list filter="[has[ribbon-text]]" variable="ignore"> - - - <$list filter="[has]" variable="ignore"> -
- <$image source={{{ [get] }}} - alt={{{ [getget[alt-text]else[Image.]] }}} - /> -
- -
<$transclude field=<>><$view field="title"/>
- <$list filter="[!is[blank]]" variable="ignore"> -
- <$text text=<>/> -
- -
<$transclude tiddler={{!!icon}}/>
-
-
- <$transclude field=<> mode="block"/> -
-
-
-
- <$list filter="[all[current]has[button-text]]" variable="ignore"> -
- <$text text={{!!button-text}}/> {{$:/core/images/chevron-right}} -
- -
- -\end diff --git a/editions/tw5.com/tiddlers/testimonials/Testimonials - Product Hunt.tid b/editions/tw5.com/tiddlers/testimonials/Testimonials - Product Hunt.tid index 388b1daa6..60b0e47d1 100644 --- a/editions/tw5.com/tiddlers/testimonials/Testimonials - Product Hunt.tid +++ b/editions/tw5.com/tiddlers/testimonials/Testimonials - Product Hunt.tid @@ -3,4 +3,6 @@ tags: Testimonial caption: Product Hunt extlink: https://www.producthunt.com/posts/tiddlywiki-2?utm_source=badge-top-post-badge&utm_medium=badge&utm_souce=badge-tiddlywiki-2 +TiddlyWiki was featured on Product Hunt on April 17th 2020, rising to become the #2 product of the day. +
{{Product Hunt Link}}
From a4c2454773e3a6a0ea67bed85c13068ac737f54e Mon Sep 17 00:00:00 2001 From: Mateusz Wilczek <36714554+mateuszwilczek@users.noreply.github.com> Date: Wed, 9 Oct 2024 13:05:41 +0200 Subject: [PATCH 112/248] Update font stacks (#8628) * Update font stacks in vanilla theme * Fix punctuation in font stacks --- themes/tiddlywiki/vanilla/settings.multids | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/themes/tiddlywiki/vanilla/settings.multids b/themes/tiddlywiki/vanilla/settings.multids index e63a4db2d..475e8d1d4 100644 --- a/themes/tiddlywiki/vanilla/settings.multids +++ b/themes/tiddlywiki/vanilla/settings.multids @@ -1,6 +1,6 @@ title: $:/themes/tiddlywiki/vanilla/settings/ -fontfamily: -apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji -codefontfamily: "SFMono-Regular",Consolas,"Liberation Mono",Menlo,Courier,monospace +fontfamily: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji" +codefontfamily: ui-monospace, "SFMono-Regular", "SF Mono", Menlo, Consolas, "Liberation Mono", monospace backgroundimageattachment: fixed backgroundimagesize: auto From ddb6c206cb3dd0cc0536f9623ee2f07822e1473a Mon Sep 17 00:00:00 2001 From: Mateusz Wilczek <36714554+mateuszwilczek@users.noreply.github.com> Date: Wed, 9 Oct 2024 13:11:44 +0200 Subject: [PATCH 113/248] Update docs for makeqr macro (#8654) --- plugins/tiddlywiki/qrcode/docs/makeqr.tid | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/plugins/tiddlywiki/qrcode/docs/makeqr.tid b/plugins/tiddlywiki/qrcode/docs/makeqr.tid index 7f5329d3e..fe3d0de25 100644 --- a/plugins/tiddlywiki/qrcode/docs/makeqr.tid +++ b/plugins/tiddlywiki/qrcode/docs/makeqr.tid @@ -11,7 +11,7 @@ The ''makeqr'' [[macro|Macros]] converts text data into an image of the correspo ;size : The size of the image in pixels (defaults to 500) ;errorCorrectLevel -: Determines the amount of error correction applied to the image; see below (defaults to "M"). +: Determines the amount of error correction applied to the image (see below, defaults to "M") ;fallback : The fallback image to be returned in case of an error (see below) @@ -19,26 +19,30 @@ The conversion will fail if the text is too long and/or complex and the macro wi The error correction level is a [[QR code feature|http://www.qrcode.com/en/about/error_correction.html]]: -<<< -QR Code has error correction capability to restore data if the code is dirty or damaged. ... Level Q or H may be selected for factory environment where QR Code get dirty, whereas Level L may be selected for clean environment with the large amount of data. Typically, Level M (15%) is most frequently selected. -<<< +|errorCorrectLevel |Redundancy |Use cases |h +|L | 7%|Clean environment, large amount of data | +|M | 15%|Default value, most common choice | +|Q | 25%|Dirty environment, small amount of data | +|H | 30%|~| !! Examples -Making a QR code for a simple string of text: +Making a QR code data URI for a simple string of text: ``` <> ``` -Making a QR code for the URL field of the current tiddler: +Displaying a QR code for a simple string of text: ``` -<$macrocall $name="makeqr" text={{!!url}}/> +> /> ``` -Making a QR code for the URL of the current wiki: +Displaying a QR code for a transcluded value (URL of the current wiki): ``` -<$macrocall $name="makeqr" text={{$:/info/url/full}}/> +\define qr(content) > /> + +<$transclude $variable="qr" content={{$:/info/url/full}} /> ``` From d02c220ddfaea15780100346d613d4342592bd6b Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Wed, 9 Oct 2024 14:54:58 +0100 Subject: [PATCH 114/248] Restore $:/_tw5.com-card-template Fixes error in #8664 --- editions/tw5.com/tiddlers/system/tw5.com-card-template.tid | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 editions/tw5.com/tiddlers/system/tw5.com-card-template.tid diff --git a/editions/tw5.com/tiddlers/system/tw5.com-card-template.tid b/editions/tw5.com/tiddlers/system/tw5.com-card-template.tid new file mode 100644 index 000000000..a2400a739 --- /dev/null +++ b/editions/tw5.com/tiddlers/system/tw5.com-card-template.tid @@ -0,0 +1,6 @@ +created: 20200507002521489 +modified: 20220719134613555 +title: $:/_tw5.com-card-template +type: text/vnd.tiddlywiki + +<$macrocall $name="flex-card" bordercolor={{!!color}} captionField="caption" subtitle={{{ [{!!community-author}!is[blank]addprefix[by ]] }}}/> From 5dd72d8223804f689a389dd5bfe5e6a9cc0d596a Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Wed, 9 Oct 2024 15:29:19 +0100 Subject: [PATCH 115/248] GettingStarted styling fixes From @ericshulman see https://talk.tiddlywiki.org/t/gettingstarted-tiddler-on-tiddlywiki-com-not-showing-any-results/10864/7 --- editions/tw5.com/tiddlers/system/tw5.com-styles.tid | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/editions/tw5.com/tiddlers/system/tw5.com-styles.tid b/editions/tw5.com/tiddlers/system/tw5.com-styles.tid index f3618afc9..8a8484d35 100644 --- a/editions/tw5.com/tiddlers/system/tw5.com-styles.tid +++ b/editions/tw5.com/tiddlers/system/tw5.com-styles.tid @@ -121,4 +121,8 @@ type: text/vnd.tiddlywiki .multi-columns { column-count: 2; } -} \ No newline at end of file +} + +.tc-saving-sidebar-category { margin-bottom:10px; } +.tc-saving-sidebar-category-title { margin-bottom:5px; font-weight:bold; } +.tc-saving-sidebar-category-item { margin-left:10px; white-space:nowrap; } From 78f120967207d915bc5077673fb61d1ae98adcee Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Wed, 9 Oct 2024 15:45:28 +0100 Subject: [PATCH 116/248] Improve tagging of HelloThere tiddlers Suggested by @ericshulman --- editions/tw5.com/tiddlers/community/TiddlyWiki on the Web.tid | 2 +- editions/tw5.com/tiddlers/gettingstarted/GettingStarted.tid | 2 +- editions/tw5.com/tiddlers/hellothere/Find Out More.tid | 2 +- .../tw5.com/tiddlers/hellothere/Testimonials and Reviews.tid | 2 +- editions/tw5.com/tiddlers/hellothere/quickstart/Quick Start.tid | 1 + editions/tw5.com/tiddlers/system/TableOfContents.tid | 2 +- editions/tw5.com/tiddlers/videos/Getting Started Video.tid | 2 +- 7 files changed, 7 insertions(+), 6 deletions(-) diff --git a/editions/tw5.com/tiddlers/community/TiddlyWiki on the Web.tid b/editions/tw5.com/tiddlers/community/TiddlyWiki on the Web.tid index 0af1b78a8..9e0dfd812 100644 --- a/editions/tw5.com/tiddlers/community/TiddlyWiki on the Web.tid +++ b/editions/tw5.com/tiddlers/community/TiddlyWiki on the Web.tid @@ -1,5 +1,5 @@ modified: 20241001141521924 -tags: TableOfContents +tags: [[Quick Start]] title: TiddlyWiki on the Web type: text/vnd.tiddlywiki icon: $:/core/images/link diff --git a/editions/tw5.com/tiddlers/gettingstarted/GettingStarted.tid b/editions/tw5.com/tiddlers/gettingstarted/GettingStarted.tid index 00871f3f1..6a22c8a37 100644 --- a/editions/tw5.com/tiddlers/gettingstarted/GettingStarted.tid +++ b/editions/tw5.com/tiddlers/gettingstarted/GettingStarted.tid @@ -1,6 +1,6 @@ created: 20131129090249275 modified: 20220819041016415 -tags: [[Working with TiddlyWiki]] +tags: [[Quick Start]] title: GettingStarted type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/hellothere/Find Out More.tid b/editions/tw5.com/tiddlers/hellothere/Find Out More.tid index c2b73703e..bc6c9b4e0 100644 --- a/editions/tw5.com/tiddlers/hellothere/Find Out More.tid +++ b/editions/tw5.com/tiddlers/hellothere/Find Out More.tid @@ -1,5 +1,5 @@ modified: 20241001141521924 -tags: TableOfContents +tags: [[Quick Start]] title: Find Out More type: text/vnd.tiddlywiki icon: $:/core/images/help diff --git a/editions/tw5.com/tiddlers/hellothere/Testimonials and Reviews.tid b/editions/tw5.com/tiddlers/hellothere/Testimonials and Reviews.tid index d33f8fa5d..c295a7a25 100644 --- a/editions/tw5.com/tiddlers/hellothere/Testimonials and Reviews.tid +++ b/editions/tw5.com/tiddlers/hellothere/Testimonials and Reviews.tid @@ -1,5 +1,5 @@ modified: 20241001141521924 -tags: TableOfContents +tags: [[Quick Start]] title: Testimonials and Reviews type: text/vnd.tiddlywiki icon: $:/core/images/star-filled diff --git a/editions/tw5.com/tiddlers/hellothere/quickstart/Quick Start.tid b/editions/tw5.com/tiddlers/hellothere/quickstart/Quick Start.tid index d57c3f5ab..fee905aa6 100644 --- a/editions/tw5.com/tiddlers/hellothere/quickstart/Quick Start.tid +++ b/editions/tw5.com/tiddlers/hellothere/quickstart/Quick Start.tid @@ -3,6 +3,7 @@ modified: 20241001141521924 list: [[Quick Start: Tiddlyhost]] [[Quick Start: Desktop]] [[Quick Start: DIY]] [[Quick Start: Xememex]] icon: $:/core/images/tip color: #cc9 +tag: TableOfContents Choose how to get started quickly with ~TiddlyWiki. diff --git a/editions/tw5.com/tiddlers/system/TableOfContents.tid b/editions/tw5.com/tiddlers/system/TableOfContents.tid index d22420a9f..948690880 100644 --- a/editions/tw5.com/tiddlers/system/TableOfContents.tid +++ b/editions/tw5.com/tiddlers/system/TableOfContents.tid @@ -1,6 +1,6 @@ caption: {{$:/language/SideBar/Contents/Caption}} created: 20140809114010378 -list: HelloThere Learning [[Working with TiddlyWiki]] [[Customise TiddlyWiki]] Features Filters Languages Editions Plugins Platforms Reference Community About +list: HelloThere [[Quick Start]] Learning [[Working with TiddlyWiki]] [[Customise TiddlyWiki]] Features Filters Languages Editions Plugins Platforms Reference Community About list-after: $:/core/ui/SideBar/Open modified: 20230322150307580 tags: $:/tags/SideBar diff --git a/editions/tw5.com/tiddlers/videos/Getting Started Video.tid b/editions/tw5.com/tiddlers/videos/Getting Started Video.tid index bb7282161..adb2dde49 100644 --- a/editions/tw5.com/tiddlers/videos/Getting Started Video.tid +++ b/editions/tw5.com/tiddlers/videos/Getting Started Video.tid @@ -1,6 +1,6 @@ created: 20140104134911101 modified: 20140919161039197 -tags: Videos [[Working with TiddlyWiki]] +tags: Videos [[Working with TiddlyWiki]] [[Quick Start]] title: Getting Started Video type: text/vnd.tiddlywiki From b2c3e2b01da17aab854763eddab6094aa75cc0ab Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Wed, 9 Oct 2024 16:23:15 +0100 Subject: [PATCH 117/248] Fix QuickStart cards --- .../tw5.com/tiddlers/hellothere/quickstart/Quick Start.tid | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/editions/tw5.com/tiddlers/hellothere/quickstart/Quick Start.tid b/editions/tw5.com/tiddlers/hellothere/quickstart/Quick Start.tid index fee905aa6..993ad3c69 100644 --- a/editions/tw5.com/tiddlers/hellothere/quickstart/Quick Start.tid +++ b/editions/tw5.com/tiddlers/hellothere/quickstart/Quick Start.tid @@ -1,14 +1,13 @@ title: Quick Start modified: 20241001141521924 -list: [[Quick Start: Tiddlyhost]] [[Quick Start: Desktop]] [[Quick Start: DIY]] [[Quick Start: Xememex]] icon: $:/core/images/tip color: #cc9 -tag: TableOfContents +tags: TableOfContents Choose how to get started quickly with ~TiddlyWiki.
-<$list filter="[tag[Quick Start]]"> +<$list filter="[[Quick Start: Tiddlyhost]] [[Quick Start: Desktop]] [[Quick Start: DIY]] [[Quick Start: Xememex]]"> <$macrocall $name="flex-card" bordercolor={{!!color}} textcolor={{!!text-color}} backgroundcolor={{!!background-color}} captionField="caption" descriptionField="text"/>
From 04185b49afaae9d027abf524adf033ab6426c6ae Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Wed, 9 Oct 2024 16:44:04 +0100 Subject: [PATCH 118/248] Further Quick Start tweaks --- editions/tw5.com/tiddlers/hellothere/quickstart/Quick Start.tid | 1 + editions/tw5.com/tiddlers/hellothere/quickstart/desktop.tid | 2 +- editions/tw5.com/tiddlers/hellothere/quickstart/diy.tid | 2 +- editions/tw5.com/tiddlers/hellothere/quickstart/tiddlyhost.tid | 2 +- editions/tw5.com/tiddlers/hellothere/quickstart/xememex.tid | 2 +- 5 files changed, 5 insertions(+), 4 deletions(-) diff --git a/editions/tw5.com/tiddlers/hellothere/quickstart/Quick Start.tid b/editions/tw5.com/tiddlers/hellothere/quickstart/Quick Start.tid index 993ad3c69..d31b55f3e 100644 --- a/editions/tw5.com/tiddlers/hellothere/quickstart/Quick Start.tid +++ b/editions/tw5.com/tiddlers/hellothere/quickstart/Quick Start.tid @@ -3,6 +3,7 @@ modified: 20241001141521924 icon: $:/core/images/tip color: #cc9 tags: TableOfContents +list: GettingStarted [[Getting Started Video]] [[Find Out More]] [[TiddlyWiki on the Web]] [[Testimonials and Reviews]] Choose how to get started quickly with ~TiddlyWiki. diff --git a/editions/tw5.com/tiddlers/hellothere/quickstart/desktop.tid b/editions/tw5.com/tiddlers/hellothere/quickstart/desktop.tid index c20fa52de..b3e9accc0 100644 --- a/editions/tw5.com/tiddlers/hellothere/quickstart/desktop.tid +++ b/editions/tw5.com/tiddlers/hellothere/quickstart/desktop.tid @@ -1,5 +1,5 @@ title: Quick Start: Desktop -tags: [[Quick Start]] +tags: [[Getting Started]] caption: Desktop icon: $:/core/images/storyview-zoomin button-color: #37753e diff --git a/editions/tw5.com/tiddlers/hellothere/quickstart/diy.tid b/editions/tw5.com/tiddlers/hellothere/quickstart/diy.tid index c71bfca27..38e475735 100644 --- a/editions/tw5.com/tiddlers/hellothere/quickstart/diy.tid +++ b/editions/tw5.com/tiddlers/hellothere/quickstart/diy.tid @@ -1,5 +1,5 @@ title: Quick Start: DIY -tags: [[Quick Start]] +tags: [[Getting Started]] caption: DIY icon: $:/core/images/theme-button button-color: #ff4522 diff --git a/editions/tw5.com/tiddlers/hellothere/quickstart/tiddlyhost.tid b/editions/tw5.com/tiddlers/hellothere/quickstart/tiddlyhost.tid index 75f4184fa..295a9310e 100644 --- a/editions/tw5.com/tiddlers/hellothere/quickstart/tiddlyhost.tid +++ b/editions/tw5.com/tiddlers/hellothere/quickstart/tiddlyhost.tid @@ -1,5 +1,5 @@ title: Quick Start: Tiddlyhost -tags: [[Quick Start]] +tags: [[Getting Started]] caption: Tiddlyhost icon: $:/core/images/globe button-color: #00009a diff --git a/editions/tw5.com/tiddlers/hellothere/quickstart/xememex.tid b/editions/tw5.com/tiddlers/hellothere/quickstart/xememex.tid index 3600418ff..9dc085b5b 100644 --- a/editions/tw5.com/tiddlers/hellothere/quickstart/xememex.tid +++ b/editions/tw5.com/tiddlers/hellothere/quickstart/xememex.tid @@ -1,5 +1,5 @@ title: Quick Start: Xememex -tags: [[Quick Start]] +tags: [[Getting Started]] caption: Xememex icon: $:/core/images/star-filled button-color: #bf5fb6 From 4c64ae5afa56f1547500ce11cefa8c42c10f1935 Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Wed, 9 Oct 2024 18:09:31 +0100 Subject: [PATCH 119/248] Notes about the newsletter --- .../community/TiddlyWiki Newsletter Team.tid | 59 +++++++++++++++++++ .../community/TiddlyWiki Newsletter.tid | 4 ++ 2 files changed, 63 insertions(+) create mode 100644 editions/tw5.com/tiddlers/community/TiddlyWiki Newsletter Team.tid diff --git a/editions/tw5.com/tiddlers/community/TiddlyWiki Newsletter Team.tid b/editions/tw5.com/tiddlers/community/TiddlyWiki Newsletter Team.tid new file mode 100644 index 000000000..b7f16bc0f --- /dev/null +++ b/editions/tw5.com/tiddlers/community/TiddlyWiki Newsletter Team.tid @@ -0,0 +1,59 @@ +title: TiddlyWiki Newsletter Team +modified: 20241009171916728 +tags: Community + +The ~TiddlyWiki Newsletter is produced by a small team of volunteers. We would love to have your help if you want to get involved. + +! Team + +The newsletter team currently consists of: + +* [[@jeremyruston|https://talk.tiddlywiki.org/u/jeremyruston]] +* [[@CodaCoder|https://talk.tiddlywiki.org/u/codacoder]] +* [[@Springer|https://talk.tiddlywiki.org/u/springer]] + +! Audience + +The newsletter is intended for TiddlyWiki end users who do not track all the discussions on https://talk.tiddlywiki.org/. + +Coverage of developer topics such as JavaScript and intricate wikitext should be handled thoughtfully to avoid alienating the core audience of end users. + +Subscribing to the newsletter should give people confidence that they will not miss any important developments. + +! Process + +The process is: + +# Determine which discussion forum threads should be included +# Decide whether to link to the thread itself or to link to the subject of the thread +# Write a 30-70 word introduction +# Optionally, choose or make an image/screenshot to illustrate the story + +These steps are described in more detail below. + +!! Criteria for Inclusion + +The criteria for inclusion are necessarily loose. Editorial judgement is required to decide whether an item is sufficiently interesting to a broad enough audience. + +Important categories of threads that should be considered: + +* All announcements of new releases of TiddlyWiki and TiddlyDesktop +* Community news and developments +* New plugins +* Updates to widely used plugins +* Showcases of interesting TiddlyWiki's in the wild + +!! Linking + +In most cases, news items should link to the opening post in the corresponding thread. There might be situations where it makes more sense to link to the item concerned which will be listed here. + +!! Writing News Items + +Items would be a 30-70 word introduction with a link, and optionally an image (the newsletter looks much more inviting with some images included). + +!! Images + +Well chosen images can be informative and add visual interest to the newsletter as a whole. Some points to consider when choosing an image: + +* Images that work best of all are those that trigger an emotional response by including a human face. It is fairly unlikely that a ~TiddlyWiki news story would have a reason to be illustrated by a picture of a smiling baby, but we should strive to do so if we can +* If using a screenshot, remember that the image will be displayed fairly small in the newsletter so it is better to crop screenshots to show a smaller area of interest rather than the entire browser window diff --git a/editions/tw5.com/tiddlers/community/TiddlyWiki Newsletter.tid b/editions/tw5.com/tiddlers/community/TiddlyWiki Newsletter.tid index 135a34617..987d7d571 100644 --- a/editions/tw5.com/tiddlers/community/TiddlyWiki Newsletter.tid +++ b/editions/tw5.com/tiddlers/community/TiddlyWiki Newsletter.tid @@ -1,6 +1,10 @@ title: TiddlyWiki Newsletter +modified: 20241009171916728 + +The ~TiddlyWiki Newsletter is a fortnightly overview of news, announcements and discussions within the ~TiddlyWiki community. It has been on hiatus for the last few months, but we are hoping to revive it soon. Subscribe to the ~TiddlyWiki Newsletter here: +The newsletter is produced by a small team of volunteers. We would welcome your help. See [[TiddlyWiki Newsletter Team]]. \ No newline at end of file From 8712979deba932dc07343ef148d7a180bd416d21 Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Wed, 9 Oct 2024 21:18:52 +0100 Subject: [PATCH 120/248] Add note about AI images --- .../tw5.com/tiddlers/community/TiddlyWiki Newsletter Team.tid | 1 + 1 file changed, 1 insertion(+) diff --git a/editions/tw5.com/tiddlers/community/TiddlyWiki Newsletter Team.tid b/editions/tw5.com/tiddlers/community/TiddlyWiki Newsletter Team.tid index b7f16bc0f..1f0ae49ed 100644 --- a/editions/tw5.com/tiddlers/community/TiddlyWiki Newsletter Team.tid +++ b/editions/tw5.com/tiddlers/community/TiddlyWiki Newsletter Team.tid @@ -57,3 +57,4 @@ Well chosen images can be informative and add visual interest to the newsletter * Images that work best of all are those that trigger an emotional response by including a human face. It is fairly unlikely that a ~TiddlyWiki news story would have a reason to be illustrated by a picture of a smiling baby, but we should strive to do so if we can * If using a screenshot, remember that the image will be displayed fairly small in the newsletter so it is better to crop screenshots to show a smaller area of interest rather than the entire browser window +* Avoid using AI generated images From 0a8fcfd3baf0f59dd6cc164c3cbe845bcb0b0de4 Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Wed, 9 Oct 2024 21:31:21 +0100 Subject: [PATCH 121/248] HelloThere tweaks suggested by @CrossEye --- editions/tw5.com/tiddlers/community/Community.tid | 2 +- .../tiddlers/community/TiddlyWiki on the Web.tid | 11 ++++++----- .../tiddlers/gettingstarted/GettingStarted.tid | 2 +- .../tw5.com/tiddlers/hellothere/Find Out More.tid | 9 +++++---- editions/tw5.com/tiddlers/hellothere/HelloThere.tid | 6 +++--- .../tiddlers/hellothere/Testimonials and Reviews.tid | 6 +++--- editions/tw5.com/tiddlers/hellothere/Welcome.tid | 7 +++++++ .../tiddlers/hellothere/quickstart/Quick Start.tid | 10 ++++++---- .../tiddlers/system/$__config_DefaultSidebarTab.tid | 7 +++++++ .../tiddlers/system/$__startup_open-welcome.tid | 4 ++++ editions/tw5.com/tiddlers/system/TableOfContents.tid | 2 +- 11 files changed, 44 insertions(+), 22 deletions(-) create mode 100644 editions/tw5.com/tiddlers/hellothere/Welcome.tid create mode 100644 editions/tw5.com/tiddlers/system/$__config_DefaultSidebarTab.tid create mode 100644 editions/tw5.com/tiddlers/system/$__startup_open-welcome.tid diff --git a/editions/tw5.com/tiddlers/community/Community.tid b/editions/tw5.com/tiddlers/community/Community.tid index 75e8e623c..2b3b7abfb 100644 --- a/editions/tw5.com/tiddlers/community/Community.tid +++ b/editions/tw5.com/tiddlers/community/Community.tid @@ -1,6 +1,6 @@ created: 20130909151600000 modified: 20210322152237662 -tags: TableOfContents +tags: TableOfContents Welcome title: Community type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/community/TiddlyWiki on the Web.tid b/editions/tw5.com/tiddlers/community/TiddlyWiki on the Web.tid index 9e0dfd812..9b7a1af30 100644 --- a/editions/tw5.com/tiddlers/community/TiddlyWiki on the Web.tid +++ b/editions/tw5.com/tiddlers/community/TiddlyWiki on the Web.tid @@ -1,10 +1,11 @@ -modified: 20241001141521924 -tags: [[Quick Start]] +color: #808 +created: 20241009150445080 +icon: $:/core/images/link +list: TalkTiddlyWiki [[TiddlyWiki on YouTube]] [[TiddlyWiki on Reddit]] [[TiddlyWiki on Discord]] [[TiddlyWiki on GitHub]] [[TiddlyWiki on Mastodon]] [[TiddlyWiki on Twitter]] [[TiddlyWiki on Gitter]] [[TiddlyWiki on Open Collective]] +modified: 20241009150453139 +tags: Welcome title: TiddlyWiki on the Web type: text/vnd.tiddlywiki -icon: $:/core/images/link -color: #808 -list: TalkTiddlyWiki [[TiddlyWiki on YouTube]] [[TiddlyWiki on Reddit]] [[TiddlyWiki on Discord]] [[TiddlyWiki on GitHub]] [[TiddlyWiki on Mastodon]] [[TiddlyWiki on Twitter]] [[TiddlyWiki on Gitter]] [[TiddlyWiki on Open Collective]] Links to the ~TiddlyWiki community elsewhere on the web. diff --git a/editions/tw5.com/tiddlers/gettingstarted/GettingStarted.tid b/editions/tw5.com/tiddlers/gettingstarted/GettingStarted.tid index 6a22c8a37..b055dd4c6 100644 --- a/editions/tw5.com/tiddlers/gettingstarted/GettingStarted.tid +++ b/editions/tw5.com/tiddlers/gettingstarted/GettingStarted.tid @@ -1,6 +1,6 @@ created: 20131129090249275 modified: 20220819041016415 -tags: [[Quick Start]] +tags: [[Working with TiddlyWiki]] Welcome title: GettingStarted type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/hellothere/Find Out More.tid b/editions/tw5.com/tiddlers/hellothere/Find Out More.tid index bc6c9b4e0..1450243ee 100644 --- a/editions/tw5.com/tiddlers/hellothere/Find Out More.tid +++ b/editions/tw5.com/tiddlers/hellothere/Find Out More.tid @@ -1,9 +1,10 @@ -modified: 20241001141521924 -tags: [[Quick Start]] +color: #880 +created: 20241009150347613 +icon: $:/core/images/help +modified: 20241009150430229 +tags: Welcome title: Find Out More type: text/vnd.tiddlywiki -icon: $:/core/images/help -color: #880 Resources to help you learn more about ~TiddlyWiki and its community. diff --git a/editions/tw5.com/tiddlers/hellothere/HelloThere.tid b/editions/tw5.com/tiddlers/hellothere/HelloThere.tid index 46c9deb7d..6d1cb4be6 100644 --- a/editions/tw5.com/tiddlers/hellothere/HelloThere.tid +++ b/editions/tw5.com/tiddlers/hellothere/HelloThere.tid @@ -1,10 +1,10 @@ created: 20130822170200000 +icon: $:/core/icon list: [[A Gentle Guide to TiddlyWiki]] [[Discover TiddlyWiki]] [[Some of the things you can do with TiddlyWiki]] [[Ten reasons to switch to TiddlyWiki]] Examples [[What happened to the original TiddlyWiki?]] -modified: 20241001141521924 -tags: TableOfContents +modified: 20241009150333146 +tags: Welcome title: HelloThere type: text/vnd.tiddlywiki -icon: $:/core/icon !!.tc-hero-heading ''Welcome to TiddlyWiki, a unique [[non-linear|Philosophy of Tiddlers]] notebook for [[capturing|Creating and editing tiddlers]], [[organising|Structuring TiddlyWiki]] and [[sharing|Sharing your tiddlers with others]] complex information'' diff --git a/editions/tw5.com/tiddlers/hellothere/Testimonials and Reviews.tid b/editions/tw5.com/tiddlers/hellothere/Testimonials and Reviews.tid index c295a7a25..4ce3435e2 100644 --- a/editions/tw5.com/tiddlers/hellothere/Testimonials and Reviews.tid +++ b/editions/tw5.com/tiddlers/hellothere/Testimonials and Reviews.tid @@ -1,9 +1,9 @@ +color: #088 +icon: $:/core/images/star-filled modified: 20241001141521924 -tags: [[Quick Start]] +tags: Welcome title: Testimonials and Reviews type: text/vnd.tiddlywiki -icon: $:/core/images/star-filled -color: #088 \parsermode inline
diff --git a/editions/tw5.com/tiddlers/hellothere/Welcome.tid b/editions/tw5.com/tiddlers/hellothere/Welcome.tid new file mode 100644 index 000000000..c23d1edcb --- /dev/null +++ b/editions/tw5.com/tiddlers/hellothere/Welcome.tid @@ -0,0 +1,7 @@ +list: HelloThere [[Quick Start]] [[Find Out More]] [[TiddlyWiki on the Web]] [[Testimonials and Reviews]] GettingStarted Community +tags: TableOfContents +list-before: +title: Welcome +type: text/vnd.tiddlywiki + +<]" >> \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/hellothere/quickstart/Quick Start.tid b/editions/tw5.com/tiddlers/hellothere/quickstart/Quick Start.tid index d31b55f3e..36f6ca64a 100644 --- a/editions/tw5.com/tiddlers/hellothere/quickstart/Quick Start.tid +++ b/editions/tw5.com/tiddlers/hellothere/quickstart/Quick Start.tid @@ -1,9 +1,11 @@ -title: Quick Start -modified: 20241001141521924 -icon: $:/core/images/tip color: #cc9 -tags: TableOfContents +created: 20241009163451663 +icon: $:/core/images/tip list: GettingStarted [[Getting Started Video]] [[Find Out More]] [[TiddlyWiki on the Web]] [[Testimonials and Reviews]] +modified: 20241009163521037 +tags: Welcome +title: Quick Start +type: text/vnd.tiddlywiki Choose how to get started quickly with ~TiddlyWiki. diff --git a/editions/tw5.com/tiddlers/system/$__config_DefaultSidebarTab.tid b/editions/tw5.com/tiddlers/system/$__config_DefaultSidebarTab.tid new file mode 100644 index 000000000..0d13bc38b --- /dev/null +++ b/editions/tw5.com/tiddlers/system/$__config_DefaultSidebarTab.tid @@ -0,0 +1,7 @@ +created: 20241009155913899 +modified: 20241009155953494 +tags: +title: $:/config/DefaultSidebarTab +type: text/vnd.tiddlywiki + +TableOfContents \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/system/$__startup_open-welcome.tid b/editions/tw5.com/tiddlers/system/$__startup_open-welcome.tid new file mode 100644 index 000000000..ae25abfec --- /dev/null +++ b/editions/tw5.com/tiddlers/system/$__startup_open-welcome.tid @@ -0,0 +1,4 @@ +title: $:/state/toc/TableOfContents-Welcome--232442599 +type: text/vnd.tiddlywiki + +open \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/system/TableOfContents.tid b/editions/tw5.com/tiddlers/system/TableOfContents.tid index 948690880..b90e0c593 100644 --- a/editions/tw5.com/tiddlers/system/TableOfContents.tid +++ b/editions/tw5.com/tiddlers/system/TableOfContents.tid @@ -1,7 +1,7 @@ caption: {{$:/language/SideBar/Contents/Caption}} created: 20140809114010378 list: HelloThere [[Quick Start]] Learning [[Working with TiddlyWiki]] [[Customise TiddlyWiki]] Features Filters Languages Editions Plugins Platforms Reference Community About -list-after: $:/core/ui/SideBar/Open +list-before: modified: 20230322150307580 tags: $:/tags/SideBar title: TableOfContents From ead0fd5219f8cb6e1071674a7b776240820cfcce Mon Sep 17 00:00:00 2001 From: Leilei332 Date: Thu, 10 Oct 2024 20:32:57 +0800 Subject: [PATCH 122/248] Migrate to eslint 9 (#8673) * Migrate to eslint 9 * Add comment in eslintignore --- .eslintignore | 8 -- .eslintrc.yml | 286 ---------------------------------------- eslint.config.js | 333 +++++++++++++++++++++++++++++++++++++++++++++++ package.json | 3 +- 4 files changed, 335 insertions(+), 295 deletions(-) delete mode 100644 .eslintignore delete mode 100644 .eslintrc.yml create mode 100644 eslint.config.js diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 9e586b92e..000000000 --- a/.eslintignore +++ /dev/null @@ -1,8 +0,0 @@ -# Ignore "third party" code whose style we will not change. -/boot/sjcl.js -/core/modules/utils/base64-utf8/base64-utf8.module.js -/core/modules/utils/base64-utf8/base64-utf8.module.min.js -/core/modules/utils/diff-match-patch/diff_match_patch.js -/core/modules/utils/diff-match-patch/diff_match_patch_uncompressed.js -/core/modules/utils/dom/csscolorparser.js -/plugins/tiddlywiki/*/files/ diff --git a/.eslintrc.yml b/.eslintrc.yml deleted file mode 100644 index 0316b8385..000000000 --- a/.eslintrc.yml +++ /dev/null @@ -1,286 +0,0 @@ -env: - browser: true - commonjs: true - es2021: true - node: true -extends: 'eslint:recommended' -globals: - "$tw": "writable" # temporary -parserOptions: - ecmaVersion: 5 -rules: - array-bracket-newline: 'off' - array-bracket-spacing: 'off' - array-callback-return: 'off' - array-element-newline: 'off' - arrow-body-style: error - arrow-parens: - - error - - as-needed - arrow-spacing: - - error - - after: true - before: true - block-scoped-var: 'off' - block-spacing: 'off' - brace-style: 'off' - callback-return: 'off' - camelcase: 'off' - capitalized-comments: 'off' - class-methods-use-this: error - comma-dangle: 'off' - comma-spacing: 'off' - comma-style: 'off' - complexity: 'off' - computed-property-spacing: 'off' - consistent-return: 'off' - consistent-this: 'off' - curly: 'off' - default-case: 'off' - default-case-last: error - default-param-last: error - dot-location: 'off' - dot-notation: 'off' - eol-last: 'off' - eqeqeq: 'off' - func-call-spacing: 'off' - func-name-matching: 'off' - func-names: 'off' - func-style: 'off' - function-call-argument-newline: 'off' - function-paren-newline: 'off' - generator-star-spacing: error - global-require: 'off' - grouped-accessor-pairs: error - guard-for-in: 'off' - handle-callback-err: 'off' - id-blacklist: error - id-denylist: error - id-length: 'off' - id-match: error - implicit-arrow-linebreak: error - indent: 'off' - indent-legacy: 'off' - init-declarations: 'off' - jsx-quotes: error - key-spacing: 'off' - keyword-spacing: - - error - - before: true - after: false - overrides: - 'case': - after: true - 'do': - 'after': true - 'else': - after: true - 'return': - after: true - 'throw': - after: true - 'try': - after: true - line-comment-position: 'off' - linebreak-style: 'off' - lines-around-comment: 'off' - lines-around-directive: 'off' - lines-between-class-members: error - max-classes-per-file: error - max-depth: 'off' - max-len: 'off' - max-lines: 'off' - max-lines-per-function: 'off' - max-nested-callbacks: error - max-params: 'off' - max-statements: 'off' - max-statements-per-line: 'off' - multiline-comment-style: 'off' - multiline-ternary: 'off' - new-parens: 'off' - newline-after-var: 'off' - newline-before-return: 'off' - newline-per-chained-call: 'off' - no-alert: 'off' - no-array-constructor: 'off' - no-await-in-loop: error - no-bitwise: 'off' - no-buffer-constructor: 'off' - no-caller: error - no-catch-shadow: 'off' - no-confusing-arrow: error - no-console: 'off' - no-constant-condition: - - error - - checkLoops: false - no-constructor-return: error - no-continue: 'off' - no-div-regex: 'off' - no-duplicate-imports: error - no-else-return: 'off' - no-empty-function: 'off' - no-eq-null: 'off' - no-eval: 'off' - no-extend-native: 'off' - no-extra-bind: 'off' - no-extra-label: 'off' - no-extra-parens: 'off' - no-floating-decimal: 'off' - no-implicit-coercion: - - error - - boolean: false - number: false - string: false - no-implicit-globals: 'off' - no-implied-eval: error - no-inline-comments: 'off' - no-invalid-this: 'off' - no-iterator: error - no-label-var: 'off' - no-labels: 'off' - no-lone-blocks: 'off' - no-lonely-if: 'off' - no-loop-func: 'off' - no-loss-of-precision: error - no-magic-numbers: 'off' - no-mixed-operators: 'off' - no-mixed-requires: 'off' - no-multi-assign: 'off' - no-multi-spaces: 'off' - no-multi-str: error - no-multiple-empty-lines: 'off' - no-native-reassign: 'off' - no-negated-condition: 'off' - no-negated-in-lhs: error - no-nested-ternary: 'off' - no-new: 'off' - no-new-func: 'off' - no-new-object: 'off' - no-new-require: error - no-new-wrappers: error - no-octal-escape: error - no-param-reassign: 'off' - no-path-concat: error - no-plusplus: 'off' - no-process-env: 'off' - no-process-exit: 'off' - no-promise-executor-return: error - no-proto: 'off' - no-restricted-exports: error - no-restricted-globals: error - no-restricted-imports: error - no-restricted-modules: error - no-restricted-properties: error - no-restricted-syntax: error - no-return-assign: 'off' - no-return-await: error - no-script-url: 'off' - no-self-compare: 'off' - no-sequences: 'off' - no-shadow: 'off' - no-spaced-func: 'off' - no-sync: 'off' - no-tabs: 'off' - no-template-curly-in-string: error - no-ternary: 'off' - no-throw-literal: 'off' - no-trailing-spaces: 'off' - no-undef-init: 'off' - no-undefined: 'off' - no-underscore-dangle: 'off' - no-unmodified-loop-condition: 'off' - no-unneeded-ternary: 'off' - no-unreachable-loop: error - no-unused-expressions: 'off' - no-use-before-define: 'off' - no-useless-backreference: error - no-useless-call: 'off' - no-useless-computed-key: error - no-useless-concat: 'off' - no-useless-constructor: error - no-useless-rename: error - no-useless-return: 'off' - no-var: 'off' - no-void: 'off' - no-warning-comments: 'off' - no-whitespace-before-property: error - nonblock-statement-body-position: - - error - - any - object-curly-newline: 'off' - object-curly-spacing: 'off' - object-property-newline: 'off' - object-shorthand: 'off' - one-var: 'off' - one-var-declaration-per-line: 'off' - operator-assignment: 'off' - operator-linebreak: 'off' - padded-blocks: 'off' - padding-line-between-statements: error - prefer-arrow-callback: 'off' - prefer-const: 'off' - prefer-destructuring: 'off' - prefer-exponentiation-operator: 'off' - prefer-named-capture-group: 'off' - prefer-numeric-literals: error - prefer-object-spread: 'off' - prefer-promise-reject-errors: error - prefer-reflect: 'off' - prefer-regex-literals: 'off' - prefer-rest-params: 'off' - prefer-spread: 'off' - prefer-template: 'off' - quote-props: 'off' - quotes: - - error - - double - - avoidEscape: true - radix: 'off' - require-atomic-updates: error - require-await: error - require-jsdoc: 'off' - require-unicode-regexp: 'off' - rest-spread-spacing: error - semi: 'off' - semi-spacing: 'off' - semi-style: 'off' - sort-imports: error - sort-keys: 'off' - sort-vars: 'off' - space-before-blocks: 'off' - space-before-function-paren: 'off' - space-in-parens: 'off' - space-infix-ops: 'off' - space-unary-ops: 'off' - spaced-comment: 'off' - strict: 'off' - switch-colon-spacing: 'off' - symbol-description: error - template-curly-spacing: error - template-tag-spacing: error - unicode-bom: - - error - - never - valid-jsdoc: 'off' - valid-typeof: - - error - - requireStringLiterals: false - vars-on-top: 'off' - wrap-iife: 'off' - wrap-regex: 'off' - yield-star-spacing: error - yoda: 'off' - - # temporary rules - no-useless-escape: 'off' - no-unused-vars: 'off' - no-empty: 'off' - no-extra-semi: 'off' - no-redeclare: 'off' - no-control-regex: "off" - no-mixed-spaces-and-tabs: "off" - no-extra-boolean-cast: "off" - no-prototype-builtins: "off" - no-undef: "off" - no-unreachable: "off" - no-self-assign: "off" diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 000000000..2b05f7b0f --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,333 @@ +const globals = require("globals"); +const js = require("@eslint/js"); + +const { + FlatCompat, +} = require("@eslint/eslintrc"); + +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all +}); + +module.exports = [{ + ignores: [ + // Ignore "third party" code whose style we will not change. + "boot/sjcl.js", + "core/modules/utils/base64-utf8/base64-utf8.module.js", + "core/modules/utils/base64-utf8/base64-utf8.module.min.js", + "core/modules/utils/diff-match-patch/diff_match_patch.js", + "core/modules/utils/diff-match-patch/diff_match_patch_uncompressed.js", + "core/modules/utils/dom/csscolorparser.js", + "plugins/tiddlywiki/*/files/", + ], +}, ...compat.extends("eslint:recommended"), { + languageOptions: { + globals: { + ...globals.browser, + ...globals.commonjs, + ...globals.node, + $tw: "writable", // temporary + }, + + ecmaVersion: 5, + sourceType: "commonjs", + }, + + rules: { + "array-bracket-newline": "off", + "array-bracket-spacing": "off", + "array-callback-return": "off", + "array-element-newline": "off", + "arrow-body-style": "error", + "arrow-parens": ["error", "as-needed"], + + "arrow-spacing": ["error", { + after: true, + before: true, + }], + + "block-scoped-var": "off", + "block-spacing": "off", + "brace-style": "off", + "callback-return": "off", + camelcase: "off", + "capitalized-comments": "off", + "class-methods-use-this": "error", + "comma-dangle": "off", + "comma-spacing": "off", + "comma-style": "off", + complexity: "off", + "computed-property-spacing": "off", + "consistent-return": "off", + "consistent-this": "off", + curly: "off", + "default-case": "off", + "default-case-last": "error", + "default-param-last": "error", + "dot-location": "off", + "dot-notation": "off", + "eol-last": "off", + eqeqeq: "off", + "func-call-spacing": "off", + "func-name-matching": "off", + "func-names": "off", + "func-style": "off", + "function-call-argument-newline": "off", + "function-paren-newline": "off", + "generator-star-spacing": "error", + "global-require": "off", + "grouped-accessor-pairs": "error", + "guard-for-in": "off", + "handle-callback-err": "off", + "id-blacklist": "error", + "id-denylist": "error", + "id-length": "off", + "id-match": "error", + "implicit-arrow-linebreak": "error", + indent: "off", + "indent-legacy": "off", + "init-declarations": "off", + "jsx-quotes": "error", + "key-spacing": "off", + + "keyword-spacing": ["error", { + before: true, + after: false, + + overrides: { + case: { + after: true, + }, + + do: { + after: true, + }, + + else: { + after: true, + }, + + return: { + after: true, + }, + + throw: { + after: true, + }, + + try: { + after: true, + }, + }, + }], + + "line-comment-position": "off", + "linebreak-style": "off", + "lines-around-comment": "off", + "lines-around-directive": "off", + "lines-between-class-members": "error", + "max-classes-per-file": "error", + "max-depth": "off", + "max-len": "off", + "max-lines": "off", + "max-lines-per-function": "off", + "max-nested-callbacks": "error", + "max-params": "off", + "max-statements": "off", + "max-statements-per-line": "off", + "multiline-comment-style": "off", + "multiline-ternary": "off", + "new-parens": "off", + "newline-after-var": "off", + "newline-before-return": "off", + "newline-per-chained-call": "off", + "no-alert": "off", + "no-array-constructor": "off", + "no-await-in-loop": "error", + "no-bitwise": "off", + "no-buffer-constructor": "off", + "no-caller": "error", + "no-catch-shadow": "off", + "no-confusing-arrow": "error", + "no-console": "off", + + "no-constant-condition": ["error", { + checkLoops: false, + }], + + "no-constructor-return": "error", + "no-continue": "off", + "no-div-regex": "off", + "no-duplicate-imports": "error", + "no-else-return": "off", + "no-empty-function": "off", + "no-eq-null": "off", + "no-eval": "off", + "no-extend-native": "off", + "no-extra-bind": "off", + "no-extra-label": "off", + "no-extra-parens": "off", + "no-floating-decimal": "off", + + "no-implicit-coercion": ["error", { + boolean: false, + number: false, + string: false, + }], + + "no-implicit-globals": "off", + "no-implied-eval": "error", + "no-inline-comments": "off", + "no-invalid-this": "off", + "no-iterator": "error", + "no-label-var": "off", + "no-labels": "off", + "no-lone-blocks": "off", + "no-lonely-if": "off", + "no-loop-func": "off", + "no-loss-of-precision": "error", + "no-magic-numbers": "off", + "no-mixed-operators": "off", + "no-mixed-requires": "off", + "no-multi-assign": "off", + "no-multi-spaces": "off", + "no-multi-str": "error", + "no-multiple-empty-lines": "off", + "no-native-reassign": "off", + "no-negated-condition": "off", + "no-negated-in-lhs": "error", + "no-nested-ternary": "off", + "no-new": "off", + "no-new-func": "off", + "no-new-object": "off", + "no-new-require": "error", + "no-new-wrappers": "error", + "no-octal-escape": "error", + "no-param-reassign": "off", + "no-path-concat": "error", + "no-plusplus": "off", + "no-process-env": "off", + "no-process-exit": "off", + "no-promise-executor-return": "error", + "no-proto": "off", + "no-restricted-exports": "error", + "no-restricted-globals": "error", + "no-restricted-imports": "error", + "no-restricted-modules": "error", + "no-restricted-properties": "error", + "no-restricted-syntax": "error", + "no-return-assign": "off", + "no-return-await": "error", + "no-script-url": "off", + "no-self-compare": "off", + "no-sequences": "off", + "no-shadow": "off", + "no-spaced-func": "off", + "no-sync": "off", + "no-tabs": "off", + "no-template-curly-in-string": "error", + "no-ternary": "off", + "no-throw-literal": "off", + "no-trailing-spaces": "off", + "no-undef-init": "off", + "no-undefined": "off", + "no-underscore-dangle": "off", + "no-unmodified-loop-condition": "off", + "no-unneeded-ternary": "off", + "no-unreachable-loop": "error", + "no-unused-expressions": "off", + "no-use-before-define": "off", + "no-useless-backreference": "error", + "no-useless-call": "off", + "no-useless-computed-key": "error", + "no-useless-concat": "off", + "no-useless-constructor": "error", + "no-useless-rename": "error", + "no-useless-return": "off", + "no-var": "off", + "no-void": "off", + "no-warning-comments": "off", + "no-whitespace-before-property": "error", + "nonblock-statement-body-position": ["error", "any"], + "object-curly-newline": "off", + "object-curly-spacing": "off", + "object-property-newline": "off", + "object-shorthand": "off", + "one-var": "off", + "one-var-declaration-per-line": "off", + "operator-assignment": "off", + "operator-linebreak": "off", + "padded-blocks": "off", + "padding-line-between-statements": "error", + "prefer-arrow-callback": "off", + "prefer-const": "off", + "prefer-destructuring": "off", + "prefer-exponentiation-operator": "off", + "prefer-named-capture-group": "off", + "prefer-numeric-literals": "error", + "prefer-object-spread": "off", + "prefer-promise-reject-errors": "error", + "prefer-reflect": "off", + "prefer-regex-literals": "off", + "prefer-rest-params": "off", + "prefer-spread": "off", + "prefer-template": "off", + "quote-props": "off", + + quotes: ["error", "double", { + avoidEscape: true, + }], + + radix: "off", + "require-atomic-updates": "error", + "require-await": "error", + "require-jsdoc": "off", + "require-unicode-regexp": "off", + "rest-spread-spacing": "error", + semi: "off", + "semi-spacing": "off", + "semi-style": "off", + "sort-imports": "error", + "sort-keys": "off", + "sort-vars": "off", + "space-before-blocks": "off", + "space-before-function-paren": "off", + "space-in-parens": "off", + "space-infix-ops": "off", + "space-unary-ops": "off", + "spaced-comment": "off", + strict: "off", + "switch-colon-spacing": "off", + "symbol-description": "error", + "template-curly-spacing": "error", + "template-tag-spacing": "error", + "unicode-bom": ["error", "never"], + "valid-jsdoc": "off", + + "valid-typeof": ["error", { + requireStringLiterals: false, + }], + + "vars-on-top": "off", + "wrap-iife": "off", + "wrap-regex": "off", + "yield-star-spacing": "error", + yoda: "off", + + // temporary rules + "no-useless-escape": "off", + "no-unused-vars": "off", + "no-empty": "off", + "no-extra-semi": "off", + "no-redeclare": "off", + "no-control-regex": "off", + "no-mixed-spaces-and-tabs": "off", + "no-extra-boolean-cast": "off", + "no-prototype-builtins": "off", + "no-undef": "off", + "no-unreachable": "off", + "no-self-assign": "off", + }, +}]; \ No newline at end of file diff --git a/package.json b/package.json index 4dbd39087..dc2b7c496 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,8 @@ "wiki" ], "devDependencies": { - "eslint": "^7.32.0" + "eslint": "^9.12.0", + "@eslint/js": "^9.12.0" }, "bundleDependencies": [], "license": "BSD", From 2933855f31b2fa6925ba106528d441d0e94054ea Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Thu, 10 Oct 2024 15:04:38 +0100 Subject: [PATCH 123/248] Ensure "TiddlyWiki on the Web" links are displayed correctly Thanks @ericshulman --- .../community/links/external-links-view-template.tid | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 editions/tw5.com/tiddlers/community/links/external-links-view-template.tid diff --git a/editions/tw5.com/tiddlers/community/links/external-links-view-template.tid b/editions/tw5.com/tiddlers/community/links/external-links-view-template.tid new file mode 100644 index 000000000..c7eceb91a --- /dev/null +++ b/editions/tw5.com/tiddlers/community/links/external-links-view-template.tid @@ -0,0 +1,8 @@ +title: $:/_tw5.com/external-links-view-template +tags: $:/tags/ViewTemplate + +<%if [tag[TiddlyWiki on the Web]] %> +
+<$macrocall $name="flex-card-external" backgroundcolor={{!!background-color}} textcolor={{!!text-color}} captionField="caption"/> +
+<%endif%> From a51afc8b818d81ea153c889295359c79562a5f7b Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Thu, 10 Oct 2024 15:10:55 +0100 Subject: [PATCH 124/248] Add support for HTTP bearer authentication --- core/modules/startup/rootwidget.js | 4 +++- core/modules/utils/dom/http.js | 5 +++++ .../tiddlers/messages/WidgetMessage_ tm-http-request.tid | 2 ++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/core/modules/startup/rootwidget.js b/core/modules/startup/rootwidget.js index d81e07aee..d96d569c3 100644 --- a/core/modules/startup/rootwidget.js +++ b/core/modules/startup/rootwidget.js @@ -52,7 +52,9 @@ exports.startup = function() { basicAuthUsername: params["basic-auth-username"], basicAuthUsernameFromStore: params["basic-auth-username-from-store"], basicAuthPassword: params["basic-auth-password"], - basicAuthPasswordFromStore: params["basic-auth-password-from-store"] + basicAuthPasswordFromStore: params["basic-auth-password-from-store"], + bearerAuthToken: params["bearer-auth-token"], + bearerAuthTokenFromStore: params["bearer-auth-token-from-store"] }); }); $tw.rootWidget.addEventListener("tm-http-cancel-all-requests",function(event) { diff --git a/core/modules/utils/dom/http.js b/core/modules/utils/dom/http.js index 65bdfd1e5..f16f1c512 100644 --- a/core/modules/utils/dom/http.js +++ b/core/modules/utils/dom/http.js @@ -104,6 +104,8 @@ basicAuthUsername: plain username for basic authentication basicAuthUsernameFromStore: name of password store entry containing username basicAuthPassword: plain password for basic authentication basicAuthPasswordFromStore: name of password store entry containing password +bearerAuthToken: plain text token for bearer authentication +bearerAuthTokenFromStore: name of password store entry contain bear authorization token */ function HttpClientRequest(options) { var self = this; @@ -135,8 +137,11 @@ function HttpClientRequest(options) { }); this.basicAuthUsername = options.basicAuthUsername || (options.basicAuthUsernameFromStore && $tw.utils.getPassword(options.basicAuthUsernameFromStore)) || ""; this.basicAuthPassword = options.basicAuthPassword || (options.basicAuthPasswordFromStore && $tw.utils.getPassword(options.basicAuthPasswordFromStore)) || ""; + this.bearerAuthToken = options.bearerAuthToken || (options.bearerAuthTokenFromStore && $tw.utils.getPassword(options.bearerAuthTokenFromStore)) || ""; if(this.basicAuthUsername && this.basicAuthPassword) { this.requestHeaders.Authorization = "Basic " + $tw.utils.base64Encode(this.basicAuthUsername + ":" + this.basicAuthPassword); + } else if(this.bearerAuthToken) { + this.requestHeaders.Authorization = "Bearer " + this.bearerAuthToken; } } diff --git a/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-http-request.tid b/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-http-request.tid index d6efcb27c..76797b054 100644 --- a/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-http-request.tid +++ b/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-http-request.tid @@ -28,6 +28,8 @@ The following parameters are used: |basic-auth-username-from-store |<<.from-version "5.3.4">> Optional username for HTTP basic authentication, specified as the name of the entry in the password store containing the username | |basic-auth-password |<<.from-version "5.3.4">> Optional password for HTTP basic authentication | |basic-auth-password-from-store |<<.from-version "5.3.4">> Optional password for HTTP basic authentication, specified as the name of the entry in the password store containing the password | +|bearerAuthToken |<<.from-version "5.3.6">> Optional plain text token for HTTP bearer authentication | +|basic-auth-password-from-store |<<.from-version "5.3.6">> Optional token for HTTP bearer authentication, specified as the name of the entry in the password store containing the token | |var-* |Variables to be passed to the completion and progress handlers (without the "var-" prefix) | |bind-status |Title of tiddler to which the status of the request ("pending", "complete", "error") should be bound | |bind-progress |Title of tiddler to which the progress of the request (0 to 100) should be bound | From e44d6f4d7b0f427738514103e724248a98f71855 Mon Sep 17 00:00:00 2001 From: Leilei332 Date: Fri, 11 Oct 2024 20:40:35 +0800 Subject: [PATCH 125/248] Small fix for en-PH language (#8676) A small fix for two problems introduced #8669. * Two tab should be used to indent instead of four spaces in `tiddlywiki.info` in full edition. * Changed description for `en-PH`. Since "PH" isn't a country name like "US", it should be "Philippines". --- editions/full/tiddlywiki.info | 2 +- languages/en-PH/plugin.info | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/editions/full/tiddlywiki.info b/editions/full/tiddlywiki.info index 76a6b71b6..9f2686e89 100644 --- a/editions/full/tiddlywiki.info +++ b/editions/full/tiddlywiki.info @@ -33,7 +33,7 @@ "de-AT", "de-DE", "el-GR", - "en-PH", + "en-PH", "en-US", "es-ES", "fa-IR", diff --git a/languages/en-PH/plugin.info b/languages/en-PH/plugin.info index e24a80a78..b3bba8f39 100644 --- a/languages/en-PH/plugin.info +++ b/languages/en-PH/plugin.info @@ -2,7 +2,7 @@ "title": "$:/languages/en-PH", "name": "en-PH", "plugin-type": "language", - "description": "English (PH)", + "description": "English (Philippines)", "author": "JC John Sese Cuneta", "core-version": ">=5.3.5" } From 416925d35458f373bc7bb0964b1ae2d74a0d0878 Mon Sep 17 00:00:00 2001 From: IchijikuIchigo Date: Mon, 14 Oct 2024 20:32:17 +0900 Subject: [PATCH 126/248] [ja_JP] Japanese translation update (#8679) * [ja-JP] Japanese translation of editions\tw5.com\tiddlers\hellothere\HelloThere.tid * [ja-JP] Japanese translation of editions\tw5.com\tiddlers\hellothere\quickstart\tiddlyhost.tid * [ja-JP] Japanese translation of editions\tw5.com\tiddlers\hellothere\quickstart\desktop.tid * [ja-JP] Japanese translation of editions\tw5.com\tiddlers\hellothere\quickstart\diy.tid * [ja-JP] Japanese translation of editions\tw5.com\tiddlers\hellothere\quickstart\xememex.tid * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\hellothere\quickstart\Quick Start.tid' * [ja-JP] Modify 'editions\fr-FR\tiddlers$ _config_ViewTemplateTitleFilters_fr-default.tid' for Japanese * [ja-JP] Modify 'editions\fr-FR\tiddlers$ _core_ui_ViewTemplate_title_fr-default.tid' for Japanese * [ja-JP] Modify 'editions\fr-FR\tiddlers-FR_Macros_list.tid' for Japanese * [ja-JP] Modify 'editions\fr-FR\tiddlers-FR_Macros_timeline-title.tid' for Japanese * [ja-JP] Modify 'editions\fr-FR\tiddlers-FR_Macros_toc-caption.tid' for Japanese * [ja-JP] Japanese translation of editions\tw5.com\tiddlers\_tw_shared\sites.tid * [ja-JP] Japanese translation of editions\tw5.com\tiddlers\_tw_shared\sites\classic.tiddlywiki.com.tid * [ja-JP] Japanese translation of editions\tw5.com\tiddlers\_tw_shared\sites\links.tiddlywiki.org.tid * [ja-JP] Japanese translation of editions\tw5.com\tiddlers\_tw_shared\sites\marketplace.tid * [ja-JP] Japanese translation of editions\tw5.com\tiddlers\_tw_shared\sites\talk.tiddlywiki.org.tid * [ja-JP] Japanese translation of editions\tw5.com\tiddlers\_tw_shared\sites\tiddlywiki.com.dev.tid * [ja-JP] Japanese translation of editions\tw5.com\tiddlers\_tw_shared\sites\tiddlywiki.com.prerelease.tid * [ja-JP] Japanese translation of editions\tw5.com\tiddlers\_tw_shared\sites\tiddlywiki.com.tid * [ja-JP] Japanese translation of editions\tw5.com\tiddlers\_tw_shared\sites\tiddlywiki.com.upgrade.tid * [ja-JP] Japanese translation of editions\tw5.com\tiddlers\_tw_shared\sites\tiddlywiki.org.tid * [ja-JP] Japanese translation of editions\tw5.com\tiddlers\gettingstarted\GettingStarted.tid * [ja-JP] Japanese translation of editions\tw5.com\tiddlers\menubar\gettingstarted.tid * [ja-JP] Modify 'editions\fr-FR\tiddlers\system.tid' for Japanese * [ja-JP] Modify 'editions\fr-FR\tiddlers\system.tid' for Japanese * [ja-JP] Modify 'editions\fr-FR\tiddlers\system.tid' for Japanese * [ja-JP] Modify 'editions\fr-FR\tiddlers\system.tid' for Japanese * [ja-JP] Japanese translation of editions\tw5.com\tiddlers\system\TableOfContents.tid * [ja-JP] Japanese translation of plugins\tiddlywiki\menubar\items\contents.tid * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\hellothere\thumbnails\HelloThumbnail - Twenty Years of TiddlyWiki.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\hellothere\thumbnails\HelloThumbnail - Newsletter.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\hellothere\thumbnails\HelloThumbnail - Introduction Video.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\hellothere\thumbnails\HelloThumbnail - Grok TiddlyWiki.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\hellothere\thumbnails\HelloThumbnail - Latest Version.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\hellothere\thumbnails\HelloThumbnail - Funding.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\hellothere\thumbnails\HelloThumbnail - TiddlyWikiLinks.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\hellothere\thumbnails\HelloThumbnail - Marketplace.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\hellothere\thumbnails\HelloThumbnail - Intertwingled Innovations.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\testimonials\Testimonials - Joe Armstrong.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\testimonials\Testimonials - Network World.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\testimonials\Testimonials - Product Hunt.tid' * [ja-JP] Japanese translation of editions\tw5.com\tiddlers\community\Community.tid * [ja-JP] Japanese translation of editions\tw5.com\tiddlers\community\Forums.tid * [ja-JP] Japanese translation of editions\tw5.com\tiddlers\community\Forums.tid * [ja-JP] Japanese translation of editions\tw5.com\tiddlers\about\Developers.tid * [ja-JP] Japanese translation of editions\tw5.com\tiddlers\about\Developers.tid * [ja-JP] Japanese translation of editions\tw5.com\tiddlers\community\Latest.tid * [ja-JP] Japanese translation of editions\tw5.com\tiddlers\community\Tutorials.tid * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\Community Editions.tid' * [ja-JP] Japanese translation of editions\tw5.com\tiddlers\community\Latest.tid * [ja-JP] Japanese translation of editions\tw5.com\tiddlers\community\Tutorials.tid * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\Community Plugins.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\Community Palettes.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\Community Themes.tid * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\Other Resources.tid' * [ja-JP] Japanese translation of editions\tw5.com\tiddlers\community\Examples.tid * [ja-JP] Japanese translation of editions\tw5.com\tiddlers\community\Articles.tid * [ja-JP] Japanese translation of editions\tw5.com\tiddlers\community\Meetups.tid * [ja-JP] Japanese translation of editions\tw5.com\tiddlers\saving\Saving.tid * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\saving\Saving on TiddlyDesktop.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\saving\Saving on TidGi.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\saving\Saving on Android.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\saving\Saving on Browser with the File System Access API.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\saving\Saving on Browser with TiddlyStow.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\saving\Saving on TiddlyHost.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\saving\Saving via WebDAV.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\saving\Saving with the HTML5 saver.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\saving\Saving via minimal Ruby server.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\saving\Saving with FireFox.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\saving\Saving with Polly.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\saving\Saving to a Git service.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\saving\Saving via a Minimal Web Server.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\saving\Saving on iPad_iPhone.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\saving\Saving with TiddlyFox.tid' * Display the modified date and time of the original tiddler * Add translation changes to Japanese from commit: 47519b1 * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\saving\Saving with TiddlyIE.tid' * Add translation changes to Japanese from commit: 0a8fcfd * [ja-JP] Japanese translation of editions\tw5.com\tiddlers\hellothere\Welcome.tid * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\hellothere\Find Out More.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\hellothere\Testimonials and Reviews.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\TiddlyWiki on the Web.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\videos\Getting Started Video.tid' * [ja-JP] Add translation changes to Japanese from commit: 04185b4 * [ja-JP] Add translation changes to Japanese from commit: 0a8fcfd * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\resources\Twexe_ Single File Tiddlywiki5 executable.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\resources\_file-backups_ Extension Firefox by pmario.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\resources\_Timimi_ Extension and executable by Riz.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\saving\Installing TiddlyWiki on Microsoft Internet Information Server.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\resources\TiddlyServer by Arlen Beiler.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\howtos\Windows HTA Hack.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\resources\TiddlyDrive Add-on for Google Drive by Joshua Stubbs.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\nodejs\Installing TiddlyWiki on Node.js.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\resources\TW5-firebase_ TiddlyWiki5 for Google Firebase by Peter Neumark.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\resources\TW5-firebase_ TiddlyWiki5 for Google Firebase by Peter Neumark.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\saving\Saving with TiddlyPWA.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\saving\TiddlyBucket - Save to AWS or Google Storage.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\saving\Emergency Tiddler Export.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\editions\_Noteself_ by Danielo Rodriguez.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\saving\TiddlyWiki in the Sky for Dropbox.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\nodejs\Serving TW5 from Android.tid' * [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\resources\_savetiddlers_ Extension for Chrome and Firefox by buggyj.tid' * [ja-JP] Corrected the translation of HTML5 saver --- ...ViewTemplateSubtitle_original-modified.tid | 6 + ...ig_ViewTemplateTitleFilters_ja-default.tid | 8 ++ ..._core_ui_ViewTemplate_title_ja-default.tid | 9 ++ .../tiddlers/$_editions_ja-JP_Macros_list.tid | 25 ++++ ...$_editions_ja-JP_Macros_timeline-title.tid | 12 ++ .../$_editions_ja-JP_Macros_toc-caption.tid | 16 +++ ...gins_tiddlywiki_menubar_items_contents.tid | 12 ++ editions/ja-JP/tiddlers/_tw_shared/sites.tid | 33 +++++ .../sites/classic.tiddlywiki.com.tid | 7 ++ .../_tw_shared/sites/links.tiddlywiki.org.tid | 7 ++ .../tiddlers/_tw_shared/sites/marketplace.tid | 7 ++ .../_tw_shared/sites/talk.tiddlywiki.org.tid | 7 ++ .../_tw_shared/sites/tiddlywiki.com.dev.tid | 7 ++ .../sites/tiddlywiki.com.prerelease.tid | 7 ++ .../_tw_shared/sites/tiddlywiki.com.tid | 7 ++ .../sites/tiddlywiki.com.upgrade.tid | 7 ++ .../_tw_shared/sites/tiddlywiki.org.tid | 7 ++ editions/ja-JP/tiddlers/about/Developers.tid | 31 +++++ .../ja-JP/tiddlers/community/Articles.tid | 28 +++++ .../tiddlers/community/Community Editions.tid | 27 ++++ .../tiddlers/community/Community Palettes.tid | 27 ++++ .../tiddlers/community/Community Plugins.tid | 27 ++++ .../tiddlers/community/Community Themes.tid | 27 ++++ .../ja-JP/tiddlers/community/Community.tid | 13 ++ .../ja-JP/tiddlers/community/Examples.tid | 26 ++++ editions/ja-JP/tiddlers/community/Forums.tid | 38 ++++++ editions/ja-JP/tiddlers/community/Latest.tid | 28 +++++ editions/ja-JP/tiddlers/community/Meetups.tid | 16 +++ .../tiddlers/community/Other Resources.tid | 27 ++++ .../community/TiddlyWiki on the Web.tid | 18 +++ .../ja-JP/tiddlers/community/Tutorials.tid | 28 +++++ .../_Noteself_ by Danielo Rodriguez.tid | 35 ++++++ ...5 for Google Firebase by Peter Neumark.tid | 29 +++++ ...d-on for Google Drive by Joshua Stubbs.tid | 26 ++++ .../TiddlyServer by Arlen Beiler.tid | 30 +++++ ...xe_ Single File Tiddlywiki5 executable.tid | 32 +++++ ...imimi_ Extension and executable by Riz.tid | 36 ++++++ ...e-backups_ Extension Firefox by pmario.tid | 20 +++ ...nsion for Chrome and Firefox by buggyj.tid | 18 +++ .../gettingstarted/GettingStarted.tid | 17 +++ .../tiddlers/hellothere/Find Out More.tid | 18 +++ .../ja-JP/tiddlers/hellothere/HelloThere.tid | 19 +++ .../hellothere/Testimonials and Reviews.tid | 15 +++ .../ja-JP/tiddlers/hellothere/Welcome.tid | 8 ++ .../hellothere/quickstart/Quick Start.tid | 23 ++++ .../hellothere/quickstart/desktop.tid | 11 ++ .../tiddlers/hellothere/quickstart/diy.tid | 11 ++ .../hellothere/quickstart/tiddlyhost.tid | 11 ++ .../hellothere/quickstart/xememex.tid | 11 ++ .../thumbnails/HelloThumbnail - Funding.tid | 10 ++ .../HelloThumbnail - Grok TiddlyWiki.tid | 9 ++ ...oThumbnail - Intertwingled Innovations.tid | 10 ++ .../HelloThumbnail - Introduction Video.tid | 11 ++ .../HelloThumbnail - Latest Version.tid | 15 +++ .../HelloThumbnail - Marketplace.tid | 10 ++ .../HelloThumbnail - Newsletter.tid | 10 ++ .../HelloThumbnail - TiddlyWikiLinks.tid | 9 ++ ...Thumbnail - Twenty Years of TiddlyWiki.tid | 10 ++ .../tiddlers/howtos/Windows HTA Hack.tid | 18 +++ .../ja-JP/tiddlers/menubar/gettingstarted.tid | 7 ++ .../Installing TiddlyWiki on Node.js.tid | 44 +++++++ .../nodejs/Serving TW5 from Android.tid | 48 ++++++++ .../saving/Emergency Tiddler Export.tid | 31 +++++ ... Microsoft Internet Information Server.tid | 70 +++++++++++ .../tiddlers/saving/Saving on Android.tid | 35 ++++++ .../Saving on Browser with TiddlyStow.tid | 19 +++ ...rowser with the File System Access API.tid | 22 ++++ .../ja-JP/tiddlers/saving/Saving on TidGi.tid | 27 ++++ .../saving/Saving on TiddlyDesktop.tid | 21 ++++ .../tiddlers/saving/Saving on TiddlyHost.tid | 21 ++++ .../tiddlers/saving/Saving on iPad_iPhone.tid | 31 +++++ .../saving/Saving to a Git service.tid | 32 +++++ .../tiddlers/saving/Saving via WebDAV.tid | 91 ++++++++++++++ .../Saving via a Minimal Web Server.tid | 48 ++++++++ .../saving/Saving via minimal Ruby server.tid | 21 ++++ .../tiddlers/saving/Saving with Polly.tid | 31 +++++ .../tiddlers/saving/Saving with TiddlyFox.tid | 15 +++ .../tiddlers/saving/Saving with TiddlyIE.tid | 27 ++++ .../tiddlers/saving/Saving with TiddlyPWA.tid | 17 +++ .../saving/Saving with the HTML5 saver.tid | 29 +++++ editions/ja-JP/tiddlers/saving/Saving.tid | 75 ++++++++++++ ...Bucket - Save to AWS or Google Storage.tid | 16 +++ .../TiddlyWiki in the Sky for Dropbox.tid | 19 +++ .../tiddlers/system/$_core_macros_list.tid | 115 ++++++++++++++++++ .../tiddlers/system/$_core_macros_tag.tid | 41 +++++++ .../system/$_core_ui_SideBar_Open.tid | 42 +++++++ .../system/$_core_ui_TagPickerTagTemplate.tid | 27 ++++ .../ja-JP/tiddlers/system/TableOfContents.tid | 16 +++ .../Testimonials - Joe Armstrong.tid | 9 ++ .../Testimonials - Network World.tid | 9 ++ .../Testimonials - Product Hunt.tid | 9 ++ .../tiddlers/videos/Getting Started Video.tid | 13 ++ 92 files changed, 2105 insertions(+) create mode 100644 editions/ja-JP/tiddlers/$_config_ViewTemplateSubtitle_original-modified.tid create mode 100644 editions/ja-JP/tiddlers/$_config_ViewTemplateTitleFilters_ja-default.tid create mode 100644 editions/ja-JP/tiddlers/$_core_ui_ViewTemplate_title_ja-default.tid create mode 100644 editions/ja-JP/tiddlers/$_editions_ja-JP_Macros_list.tid create mode 100644 editions/ja-JP/tiddlers/$_editions_ja-JP_Macros_timeline-title.tid create mode 100644 editions/ja-JP/tiddlers/$_editions_ja-JP_Macros_toc-caption.tid create mode 100644 editions/ja-JP/tiddlers/$_plugins_tiddlywiki_menubar_items_contents.tid create mode 100644 editions/ja-JP/tiddlers/_tw_shared/sites.tid create mode 100644 editions/ja-JP/tiddlers/_tw_shared/sites/classic.tiddlywiki.com.tid create mode 100644 editions/ja-JP/tiddlers/_tw_shared/sites/links.tiddlywiki.org.tid create mode 100644 editions/ja-JP/tiddlers/_tw_shared/sites/marketplace.tid create mode 100644 editions/ja-JP/tiddlers/_tw_shared/sites/talk.tiddlywiki.org.tid create mode 100644 editions/ja-JP/tiddlers/_tw_shared/sites/tiddlywiki.com.dev.tid create mode 100644 editions/ja-JP/tiddlers/_tw_shared/sites/tiddlywiki.com.prerelease.tid create mode 100644 editions/ja-JP/tiddlers/_tw_shared/sites/tiddlywiki.com.tid create mode 100644 editions/ja-JP/tiddlers/_tw_shared/sites/tiddlywiki.com.upgrade.tid create mode 100644 editions/ja-JP/tiddlers/_tw_shared/sites/tiddlywiki.org.tid create mode 100644 editions/ja-JP/tiddlers/about/Developers.tid create mode 100644 editions/ja-JP/tiddlers/community/Articles.tid create mode 100644 editions/ja-JP/tiddlers/community/Community Editions.tid create mode 100644 editions/ja-JP/tiddlers/community/Community Palettes.tid create mode 100644 editions/ja-JP/tiddlers/community/Community Plugins.tid create mode 100644 editions/ja-JP/tiddlers/community/Community Themes.tid create mode 100644 editions/ja-JP/tiddlers/community/Community.tid create mode 100644 editions/ja-JP/tiddlers/community/Examples.tid create mode 100644 editions/ja-JP/tiddlers/community/Forums.tid create mode 100644 editions/ja-JP/tiddlers/community/Latest.tid create mode 100644 editions/ja-JP/tiddlers/community/Meetups.tid create mode 100644 editions/ja-JP/tiddlers/community/Other Resources.tid create mode 100644 editions/ja-JP/tiddlers/community/TiddlyWiki on the Web.tid create mode 100644 editions/ja-JP/tiddlers/community/Tutorials.tid create mode 100644 editions/ja-JP/tiddlers/community/editions/_Noteself_ by Danielo Rodriguez.tid create mode 100644 editions/ja-JP/tiddlers/community/resources/TW5-firebase_ TiddlyWiki5 for Google Firebase by Peter Neumark.tid create mode 100644 editions/ja-JP/tiddlers/community/resources/TiddlyDrive Add-on for Google Drive by Joshua Stubbs.tid create mode 100644 editions/ja-JP/tiddlers/community/resources/TiddlyServer by Arlen Beiler.tid create mode 100644 editions/ja-JP/tiddlers/community/resources/Twexe_ Single File Tiddlywiki5 executable.tid create mode 100644 editions/ja-JP/tiddlers/community/resources/_Timimi_ Extension and executable by Riz.tid create mode 100644 editions/ja-JP/tiddlers/community/resources/_file-backups_ Extension Firefox by pmario.tid create mode 100644 editions/ja-JP/tiddlers/community/resources/_savetiddlers_ Extension for Chrome and Firefox by buggyj.tid create mode 100644 editions/ja-JP/tiddlers/gettingstarted/GettingStarted.tid create mode 100644 editions/ja-JP/tiddlers/hellothere/Find Out More.tid create mode 100644 editions/ja-JP/tiddlers/hellothere/HelloThere.tid create mode 100644 editions/ja-JP/tiddlers/hellothere/Testimonials and Reviews.tid create mode 100644 editions/ja-JP/tiddlers/hellothere/Welcome.tid create mode 100644 editions/ja-JP/tiddlers/hellothere/quickstart/Quick Start.tid create mode 100644 editions/ja-JP/tiddlers/hellothere/quickstart/desktop.tid create mode 100644 editions/ja-JP/tiddlers/hellothere/quickstart/diy.tid create mode 100644 editions/ja-JP/tiddlers/hellothere/quickstart/tiddlyhost.tid create mode 100644 editions/ja-JP/tiddlers/hellothere/quickstart/xememex.tid create mode 100644 editions/ja-JP/tiddlers/hellothere/thumbnails/HelloThumbnail - Funding.tid create mode 100644 editions/ja-JP/tiddlers/hellothere/thumbnails/HelloThumbnail - Grok TiddlyWiki.tid create mode 100644 editions/ja-JP/tiddlers/hellothere/thumbnails/HelloThumbnail - Intertwingled Innovations.tid create mode 100644 editions/ja-JP/tiddlers/hellothere/thumbnails/HelloThumbnail - Introduction Video.tid create mode 100644 editions/ja-JP/tiddlers/hellothere/thumbnails/HelloThumbnail - Latest Version.tid create mode 100644 editions/ja-JP/tiddlers/hellothere/thumbnails/HelloThumbnail - Marketplace.tid create mode 100644 editions/ja-JP/tiddlers/hellothere/thumbnails/HelloThumbnail - Newsletter.tid create mode 100644 editions/ja-JP/tiddlers/hellothere/thumbnails/HelloThumbnail - TiddlyWikiLinks.tid create mode 100644 editions/ja-JP/tiddlers/hellothere/thumbnails/HelloThumbnail - Twenty Years of TiddlyWiki.tid create mode 100644 editions/ja-JP/tiddlers/howtos/Windows HTA Hack.tid create mode 100644 editions/ja-JP/tiddlers/menubar/gettingstarted.tid create mode 100644 editions/ja-JP/tiddlers/nodejs/Installing TiddlyWiki on Node.js.tid create mode 100644 editions/ja-JP/tiddlers/nodejs/Serving TW5 from Android.tid create mode 100644 editions/ja-JP/tiddlers/saving/Emergency Tiddler Export.tid create mode 100644 editions/ja-JP/tiddlers/saving/Installing TiddlyWiki on Microsoft Internet Information Server.tid create mode 100644 editions/ja-JP/tiddlers/saving/Saving on Android.tid create mode 100644 editions/ja-JP/tiddlers/saving/Saving on Browser with TiddlyStow.tid create mode 100644 editions/ja-JP/tiddlers/saving/Saving on Browser with the File System Access API.tid create mode 100644 editions/ja-JP/tiddlers/saving/Saving on TidGi.tid create mode 100644 editions/ja-JP/tiddlers/saving/Saving on TiddlyDesktop.tid create mode 100644 editions/ja-JP/tiddlers/saving/Saving on TiddlyHost.tid create mode 100644 editions/ja-JP/tiddlers/saving/Saving on iPad_iPhone.tid create mode 100644 editions/ja-JP/tiddlers/saving/Saving to a Git service.tid create mode 100644 editions/ja-JP/tiddlers/saving/Saving via WebDAV.tid create mode 100644 editions/ja-JP/tiddlers/saving/Saving via a Minimal Web Server.tid create mode 100644 editions/ja-JP/tiddlers/saving/Saving via minimal Ruby server.tid create mode 100644 editions/ja-JP/tiddlers/saving/Saving with Polly.tid create mode 100644 editions/ja-JP/tiddlers/saving/Saving with TiddlyFox.tid create mode 100644 editions/ja-JP/tiddlers/saving/Saving with TiddlyIE.tid create mode 100644 editions/ja-JP/tiddlers/saving/Saving with TiddlyPWA.tid create mode 100644 editions/ja-JP/tiddlers/saving/Saving with the HTML5 saver.tid create mode 100644 editions/ja-JP/tiddlers/saving/Saving.tid create mode 100644 editions/ja-JP/tiddlers/saving/TiddlyBucket - Save to AWS or Google Storage.tid create mode 100644 editions/ja-JP/tiddlers/saving/TiddlyWiki in the Sky for Dropbox.tid create mode 100644 editions/ja-JP/tiddlers/system/$_core_macros_list.tid create mode 100644 editions/ja-JP/tiddlers/system/$_core_macros_tag.tid create mode 100644 editions/ja-JP/tiddlers/system/$_core_ui_SideBar_Open.tid create mode 100644 editions/ja-JP/tiddlers/system/$_core_ui_TagPickerTagTemplate.tid create mode 100644 editions/ja-JP/tiddlers/system/TableOfContents.tid create mode 100644 editions/ja-JP/tiddlers/testimonials/Testimonials - Joe Armstrong.tid create mode 100644 editions/ja-JP/tiddlers/testimonials/Testimonials - Network World.tid create mode 100644 editions/ja-JP/tiddlers/testimonials/Testimonials - Product Hunt.tid create mode 100644 editions/ja-JP/tiddlers/videos/Getting Started Video.tid diff --git a/editions/ja-JP/tiddlers/$_config_ViewTemplateSubtitle_original-modified.tid b/editions/ja-JP/tiddlers/$_config_ViewTemplateSubtitle_original-modified.tid new file mode 100644 index 000000000..0ebf12d4f --- /dev/null +++ b/editions/ja-JP/tiddlers/$_config_ViewTemplateSubtitle_original-modified.tid @@ -0,0 +1,6 @@ +created: 20241008104504617 +modified: 20241008105625074 +tags: $:/tags/ViewTemplate/Subtitle +title: $:/config/ViewTemplateSubtitle/original-modified + +<$view field="original-modified" format="date" template="(原文: YYYY年MM月DD日(ddd) 0hh:0mm)"/> \ No newline at end of file diff --git a/editions/ja-JP/tiddlers/$_config_ViewTemplateTitleFilters_ja-default.tid b/editions/ja-JP/tiddlers/$_config_ViewTemplateTitleFilters_ja-default.tid new file mode 100644 index 000000000..73e869875 --- /dev/null +++ b/editions/ja-JP/tiddlers/$_config_ViewTemplateTitleFilters_ja-default.tid @@ -0,0 +1,8 @@ +created: 20220219141117559 +list-before: $:/config/ViewTemplateTitleFilters/default +modified: 20240929101800579 +original-modified: 20220220192507247 +tags: $:/tags/ViewTemplateTitleFilter +title: $:/config/ViewTemplateTitleFilters/fr-default + +[has[ja-title]then[$:/core/ui/ViewTemplate/title/ja-default]] \ No newline at end of file diff --git a/editions/ja-JP/tiddlers/$_core_ui_ViewTemplate_title_ja-default.tid b/editions/ja-JP/tiddlers/$_core_ui_ViewTemplate_title_ja-default.tid new file mode 100644 index 000000000..179f2e59b --- /dev/null +++ b/editions/ja-JP/tiddlers/$_core_ui_ViewTemplate_title_ja-default.tid @@ -0,0 +1,9 @@ +created: 20220219134855444 +modified: 20240929102821839 +original-modified: 20220220192530872 +title: $:/core/ui/ViewTemplate/title/ja-default + +\whitespace trim +

+<$view field="ja-title"/> +

diff --git a/editions/ja-JP/tiddlers/$_editions_ja-JP_Macros_list.tid b/editions/ja-JP/tiddlers/$_editions_ja-JP_Macros_list.tid new file mode 100644 index 000000000..68c011f44 --- /dev/null +++ b/editions/ja-JP/tiddlers/$_editions_ja-JP_Macros_list.tid @@ -0,0 +1,25 @@ +created: 20141127091159720 +modified: 20240929104004177 +original-modified: 20141221122727114 +tags: $:/tags/Macro +title: $:/editions/ja-JP/Macros/list +type: text/vnd.tiddlywiki + +\define list-links(filter,type:"ul",subtype:"li",class:"") + +<$type$ class="$class$"> +<$list filter="$filter$"> +<$subtype$> +<$link to={{!!title}}> +<$transclude field="caption"> +<$view field="ja-title"> +<$view field="title"/> + + + + + + +\end diff --git a/editions/ja-JP/tiddlers/$_editions_ja-JP_Macros_timeline-title.tid b/editions/ja-JP/tiddlers/$_editions_ja-JP_Macros_timeline-title.tid new file mode 100644 index 000000000..63aa539bb --- /dev/null +++ b/editions/ja-JP/tiddlers/$_editions_ja-JP_Macros_timeline-title.tid @@ -0,0 +1,12 @@ +created: 20141212105632762 +modified: 20240929104207215 +original-modified: 20141212105822388 +tags: $:/tags/Macro +title: $:/editions/ja-JP/Macros/timeline-title +type: text/vnd.tiddlywiki + +\define timeline-title() +<$view field="ja-title"> +<$view field="title"/> + +\end \ No newline at end of file diff --git a/editions/ja-JP/tiddlers/$_editions_ja-JP_Macros_toc-caption.tid b/editions/ja-JP/tiddlers/$_editions_ja-JP_Macros_toc-caption.tid new file mode 100644 index 000000000..75812af2c --- /dev/null +++ b/editions/ja-JP/tiddlers/$_editions_ja-JP_Macros_toc-caption.tid @@ -0,0 +1,16 @@ +created: 20141212090228728 +modified: 20240929104321590 +original-modified: 20141212090606825 +tags: $:/tags/Macro +title: $:/editions/ja-JP/Macros/toc-caption +type: text/vnd.tiddlywiki + +\define toc-caption() +<$set name="tv-wikilinks" value="no"> +<$transclude field="caption"> +<$view field="ja-title"> +<$view field="title"/> + + + +\end diff --git a/editions/ja-JP/tiddlers/$_plugins_tiddlywiki_menubar_items_contents.tid b/editions/ja-JP/tiddlers/$_plugins_tiddlywiki_menubar_items_contents.tid new file mode 100644 index 000000000..810e01085 --- /dev/null +++ b/editions/ja-JP/tiddlers/$_plugins_tiddlywiki_menubar_items_contents.tid @@ -0,0 +1,12 @@ +title: $:/plugins/tiddlywiki/menubar/items/contents +ja-title: $:/plugins/tiddlywiki/menubar/items/contents +caption: 目次 +description: 目次 +is-dropdown: yes +tags: $:/tags/MenuBar + +
+ +<$macrocall $name="toc-selective-expandable" tag={{$:/config/plugins/menubar/TableOfContents/Tag}}/> + +
diff --git a/editions/ja-JP/tiddlers/_tw_shared/sites.tid b/editions/ja-JP/tiddlers/_tw_shared/sites.tid new file mode 100644 index 000000000..710d1089c --- /dev/null +++ b/editions/ja-JP/tiddlers/_tw_shared/sites.tid @@ -0,0 +1,33 @@ +title: $:/_tw_shared/sites +ja-title: $:/_tw_shared/sites +tags: $:/tags/MenuBar TiddlyWikiSitesMenu +caption: [img class=tc-sites-icon [Motovun Jack.svg]] サイト +is-dropdown: yes +list-after: $:/plugins/tiddlywiki/menubar/items/hamburger + +\define link-body() +\whitespace trim +<$image source={{!!icon}} class="tc-sites-menu-icon"/><$transclude field="caption" mode="inline"/><$text text=" – "/><$transclude field="description" mode="inline"/> +\end + +\define current-link-body() +\whitespace trim +
+<><$text text="this site"/> +
+\end + +\whitespace trim +
+
    +<$list filter="[all[shadows+tiddlers]tag[$:/tags/TiddlyWikiSites]]"> +
  1. +<$list filter="[{!!url}!match{$:/info/url/full}]" emptyMessage=<> variable="ignore"> + +<> + + +
  2. + +
+
diff --git a/editions/ja-JP/tiddlers/_tw_shared/sites/classic.tiddlywiki.com.tid b/editions/ja-JP/tiddlers/_tw_shared/sites/classic.tiddlywiki.com.tid new file mode 100644 index 000000000..6ee1e66ed --- /dev/null +++ b/editions/ja-JP/tiddlers/_tw_shared/sites/classic.tiddlywiki.com.tid @@ -0,0 +1,7 @@ +title: $:/_tw_shared/sites/classic.tiddlywiki.com +ja-title: $:/_tw_shared/sites/classic.tiddlywiki.com +tags: $:/tags/TiddlyWikiSites TiddlyWikiSitesMenu +caption: classic.tiddlywiki.com +description: オリジナルクラシックバージョン (v2.x.x) +url: https://classic.tiddlywiki.com/ +icon: $:/_tw_shared/favicons/classic.tiddlywiki.com diff --git a/editions/ja-JP/tiddlers/_tw_shared/sites/links.tiddlywiki.org.tid b/editions/ja-JP/tiddlers/_tw_shared/sites/links.tiddlywiki.org.tid new file mode 100644 index 000000000..348fe679e --- /dev/null +++ b/editions/ja-JP/tiddlers/_tw_shared/sites/links.tiddlywiki.org.tid @@ -0,0 +1,7 @@ +title: $:/_tw_shared/sites/links.tiddlywiki.org +ja-title: $:/_tw_shared/sites/links.tiddlywiki.org +tags: $:/tags/TiddlyWikiSites TiddlyWikiSitesMenu +caption: links.tiddlywiki.org +description: コミュニティリンク集 +url: https://links.tiddlywiki.org/ +icon: $:/_tw_shared/favicons/links.tiddlywiki.org diff --git a/editions/ja-JP/tiddlers/_tw_shared/sites/marketplace.tid b/editions/ja-JP/tiddlers/_tw_shared/sites/marketplace.tid new file mode 100644 index 000000000..a5b1bcd4b --- /dev/null +++ b/editions/ja-JP/tiddlers/_tw_shared/sites/marketplace.tid @@ -0,0 +1,7 @@ +title: $:/_tw_shared/sites/marketplace +ja-title: $:/_tw_shared/sites/marketplace +tags: $:/tags/TiddlyWikiSites TiddlyWikiSitesMenu +caption: marketplace +description: 商用プロダクト・サービス +url: https://talk.tiddlywiki.org/c/marketplace/22 +icon: $:/_tw_shared/favicons/marketplace diff --git a/editions/ja-JP/tiddlers/_tw_shared/sites/talk.tiddlywiki.org.tid b/editions/ja-JP/tiddlers/_tw_shared/sites/talk.tiddlywiki.org.tid new file mode 100644 index 000000000..dc1e7bcf8 --- /dev/null +++ b/editions/ja-JP/tiddlers/_tw_shared/sites/talk.tiddlywiki.org.tid @@ -0,0 +1,7 @@ +title: $:/_tw_shared/sites/talk.tiddlywiki.org +ja-title: $:/_tw_shared/sites/talk.tiddlywiki.org +tags: $:/tags/TiddlyWikiSites TiddlyWikiSitesMenu +caption: talk.tiddlywiki.org +description: コミュニティフォーラム +url: https://talk.tiddlywiki.org/ +icon: $:/_tw_shared/favicons/talk.tiddlywiki.org diff --git a/editions/ja-JP/tiddlers/_tw_shared/sites/tiddlywiki.com.dev.tid b/editions/ja-JP/tiddlers/_tw_shared/sites/tiddlywiki.com.dev.tid new file mode 100644 index 000000000..962ee45a7 --- /dev/null +++ b/editions/ja-JP/tiddlers/_tw_shared/sites/tiddlywiki.com.dev.tid @@ -0,0 +1,7 @@ +title: $:/_tw_shared/sites/tiddlywiki.com.dev +ja-title: $:/_tw_shared/sites/tiddlywiki.com.dev +tags: $:/tags/TiddlyWikiSites TiddlyWikiSitesMenu +caption: tiddlywiki.com/dev +description: 開発者サイト +url: https://tiddlywiki.com/dev/ +icon: $:/_tw_shared/favicons/tiddlywiki.com.dev diff --git a/editions/ja-JP/tiddlers/_tw_shared/sites/tiddlywiki.com.prerelease.tid b/editions/ja-JP/tiddlers/_tw_shared/sites/tiddlywiki.com.prerelease.tid new file mode 100644 index 000000000..66e735bc4 --- /dev/null +++ b/editions/ja-JP/tiddlers/_tw_shared/sites/tiddlywiki.com.prerelease.tid @@ -0,0 +1,7 @@ +title: $:/_tw_shared/sites/tiddlywiki.com.prerelease +ja-title: $:/_tw_shared/sites/tiddlywiki.com.prerelease +tags: $:/tags/TiddlyWikiSites TiddlyWikiSitesMenu +caption: tiddlywiki.com/prerelease +description: ネクストリリースの最新ビルド +url: https://tiddlywiki.com/prerelease/ +icon: $:/_tw_shared/favicons/tiddlywiki.com.prerelease diff --git a/editions/ja-JP/tiddlers/_tw_shared/sites/tiddlywiki.com.tid b/editions/ja-JP/tiddlers/_tw_shared/sites/tiddlywiki.com.tid new file mode 100644 index 000000000..3b7142efa --- /dev/null +++ b/editions/ja-JP/tiddlers/_tw_shared/sites/tiddlywiki.com.tid @@ -0,0 +1,7 @@ +title: $:/_tw_shared/sites/tiddlywiki.com +ja-title: $:/_tw_shared/sites/tiddlywiki.com +tags: $:/tags/TiddlyWikiSites TiddlyWikiSitesMenu +caption: tiddlywiki.com +description: メインサイト +url: https://tiddlywiki.com/ +icon: $:/_tw_shared/favicons/tiddlywiki.com diff --git a/editions/ja-JP/tiddlers/_tw_shared/sites/tiddlywiki.com.upgrade.tid b/editions/ja-JP/tiddlers/_tw_shared/sites/tiddlywiki.com.upgrade.tid new file mode 100644 index 000000000..c044f4302 --- /dev/null +++ b/editions/ja-JP/tiddlers/_tw_shared/sites/tiddlywiki.com.upgrade.tid @@ -0,0 +1,7 @@ +title: $:/_tw_shared/sites/tiddlywiki.com.upgrade +ja-title: $:/_tw_shared/sites/tiddlywiki.com.upgrade +tags: $:/tags/TiddlyWikiSites TiddlyWikiSitesMenu +caption: tiddlywiki.com/upgrade.html +description: アップグレードウィザード +url: https://tiddlywiki.com/upgrade.html +icon: $:/_tw_shared/favicons/tiddlywiki.com.upgrade diff --git a/editions/ja-JP/tiddlers/_tw_shared/sites/tiddlywiki.org.tid b/editions/ja-JP/tiddlers/_tw_shared/sites/tiddlywiki.org.tid new file mode 100644 index 000000000..6764c37cd --- /dev/null +++ b/editions/ja-JP/tiddlers/_tw_shared/sites/tiddlywiki.org.tid @@ -0,0 +1,7 @@ +title: $:/_tw_shared/sites/tiddlywiki.org +ja-title: $:/_tw_shared/sites/tiddlywiki.org +tags: $:/tags/TiddlyWikiSites TiddlyWikiSitesMenu +caption: tiddlywiki.org +description: コミュニティサイト +url: https://tiddlywiki.org/ +icon: $:/_tw_shared/favicons/tiddlywiki.org diff --git a/editions/ja-JP/tiddlers/about/Developers.tid b/editions/ja-JP/tiddlers/about/Developers.tid new file mode 100644 index 000000000..56aec4949 --- /dev/null +++ b/editions/ja-JP/tiddlers/about/Developers.tid @@ -0,0 +1,31 @@ +created: 20150412191004348 +modified: +original-modified: 20240925114810504 +tags: Community Reference +title: Developers +ja-title: 開発者 +type: text/vnd.tiddlywiki + +! [[GitHubの統計|https://github.com/TiddlyWiki/TiddlyWiki5/graphs/contributors]] + +開発者がTiddlyWikiについて学び、開発について議論し、貢献するためのリソースがあります。 + +> [img[https://repobeats.axiom.co/api/embed/b92b1b363e2b5f26837ae573a60d39b4248b50a0.svg]] + +* [[tiddlywiki.com/dev|https://tiddlywiki.com/dev]]は公式の開発者ドキュメントです + +* [[GitHubでの開発|https://github.com/TiddlyWiki/TiddlyWiki5]]に参加する + +* [[GitHubディスカッション|https://github.com/TiddlyWiki/TiddlyWiki5/discussions]]はQ&Aとオープンな形式のディスカッションです +* [[GitHubイシュー|https://github.com/TiddlyWiki/TiddlyWiki5/issues]]は、バグレポートを作成し、具体的で実現可能な新しいアイデアを提案するためのものです + +* 古い~TiddlyWikiDevGoogleグループは閉鎖され、[[TiddlyWikiトーク|https://talk.tiddlywiki.org/]]と[[GitHubディスカッション|https://github.com/TiddlyWiki/TiddlyWiki5/discussions]]に代わりました +** 有用なアーカイブとして残っています: https://groups.google.com/group/TiddlyWikiDev +*** 強化されたグループ検索機能は[[mail-archive.com|https://www.mail-archive.com/tiddlywikidev@googlegroups.com/]]で利用できます + +* https://gitter.im/TiddlyWiki/public でチャットしてください(開発ルームは近日公開予定) + +! Twitter + +* 最新ニュースは[[Twitterで@TiddlyWiki|http://twitter.com/#!/TiddlyWiki]]をフォローしてください + diff --git a/editions/ja-JP/tiddlers/community/Articles.tid b/editions/ja-JP/tiddlers/community/Articles.tid new file mode 100644 index 000000000..6c81f4417 --- /dev/null +++ b/editions/ja-JP/tiddlers/community/Articles.tid @@ -0,0 +1,28 @@ +created: 20140320230543190 +modified: 20241004114128016 +original-modified: 20160602172752299 +tags: Community +title: Articles +ja-title: 記事 +caption: 記事 +type: text/vnd.tiddlywiki + +~TiddlyWikiについて書かれた最近の記事をいくつか紹介します。新しい記事は、GitHub、Twitter、または[[TiddlyWikiグループ|Forums]]に投稿して送信してください。 + + diff --git a/editions/ja-JP/tiddlers/community/Community Editions.tid b/editions/ja-JP/tiddlers/community/Community Editions.tid new file mode 100644 index 000000000..217c2a8fa --- /dev/null +++ b/editions/ja-JP/tiddlers/community/Community Editions.tid @@ -0,0 +1,27 @@ +created: 20210101150806938 +modified: 20241004110635297 +original-modified: 20230803053451496 +tags: Community +title: Community Editions +ja-title: コミュニティエディション +caption: エディション + +これらは~TiddlyWiki[[コミュニティ|Community]]によって作成されたプレパッケージのエディションです。これらは、特定のユースケースを促進するためにプラグインと構成が追加された~TiddlyWikiです。これらは、設定に時間をかけずにTiddlyWikiにすぐにアクセスして使い始めたい場合に最適な出発点です。 + + diff --git a/editions/ja-JP/tiddlers/community/Community Palettes.tid b/editions/ja-JP/tiddlers/community/Community Palettes.tid new file mode 100644 index 000000000..3ab98fbb8 --- /dev/null +++ b/editions/ja-JP/tiddlers/community/Community Palettes.tid @@ -0,0 +1,27 @@ +created: 20210101152520906 +modified: 20241004112603568 +original-modified: 20210101152533358 +tags: Community +title: Community Palettes +ja-title: コミュニティパレット +caption: パレット + +~TiddlyWiki[[コミュニティ|Community]]のメンバーによって作成されたパレットのリストです。パレットはTiddlyWikiのカラースキームを変更し、テーマと組み合わせて使用​​できます + + diff --git a/editions/ja-JP/tiddlers/community/Community Plugins.tid b/editions/ja-JP/tiddlers/community/Community Plugins.tid new file mode 100644 index 000000000..880694773 --- /dev/null +++ b/editions/ja-JP/tiddlers/community/Community Plugins.tid @@ -0,0 +1,27 @@ +created: 20210101150806938 +modified: 20241004111247100 +original-modified: 20210101151403345 +tags: Community +title: Community Plugins +ja-title: コミュニティプラグイン +caption: プラグイン + +~TiddlyWiki[[コミュニティ|Community]]によって作成されたプラグインです。Webサイトにアクセスしてプラグインを試してください。インストール手順をよく読み、インストールする前にバックアップしてください。これらのプラグインは常に最新であるとは限らず、バグや望ましくない動作が含まれている可能性があります。さらに多くのプラグインについては、[[TiddlyWiki グループ|Forums]]にアクセスしてください。新しいプラグインは最初にそこに投稿され、発表されます + + diff --git a/editions/ja-JP/tiddlers/community/Community Themes.tid b/editions/ja-JP/tiddlers/community/Community Themes.tid new file mode 100644 index 000000000..a958f4f6e --- /dev/null +++ b/editions/ja-JP/tiddlers/community/Community Themes.tid @@ -0,0 +1,27 @@ +created: 20210101152520906 +modified: 20241004112108104 +original-modified: 20210101152533358 +tags: Community +title: Community Themes +ja-title: コミュニティテーマ +caption: テーマ + +~TiddlyWiki[[コミュニティ|Community]]のメンバーによって作成されたテーマのリストです。テーマはTiddlyWikiのルック・アンド・フィールを変更し、さらにカスタマイズを可能にします。テーマのインストールは[[プラグインと同じように|Manually installing a plugin]]機能します。 + + diff --git a/editions/ja-JP/tiddlers/community/Community.tid b/editions/ja-JP/tiddlers/community/Community.tid new file mode 100644 index 000000000..d9f327605 --- /dev/null +++ b/editions/ja-JP/tiddlers/community/Community.tid @@ -0,0 +1,13 @@ +created: 20130909151600000 +modified: 20241002113817654 +original-modified: 20210322152237662 +tags: TableOfContents Welcome +title: Community +ja-title: コミュニティ +type: text/vnd.tiddlywiki + +<<.tip "最新の有益なリンクが[[コミュニティリンク収集|Community Links Aggregator]]に集められています。">> + +すべての関連リンクがこれらのエントリに書かれると、メインのtiddlywiki.comサイトからは削除されます。 + +<> diff --git a/editions/ja-JP/tiddlers/community/Examples.tid b/editions/ja-JP/tiddlers/community/Examples.tid new file mode 100644 index 000000000..0388784e1 --- /dev/null +++ b/editions/ja-JP/tiddlers/community/Examples.tid @@ -0,0 +1,26 @@ +created: 20140320230543190 +modified: 20241004113722328 +original-modified: 20160602172745917 +tags: HelloThere Community +title: Examples +ja-title: 使用例 +caption: 使用例 +type: text/vnd.tiddlywiki + +このコレクションでは、実際に使用されている~TiddlyWikiの刺激的で興味深い例を紹介します。このコレクションに新しいエントリを送信するには、GitHubやTwitter経由、または[[TiddlyWikiグループ|Forums]]へ投稿してください。 + +